CoreImageでエフェクトした画像がUIActivityViewControllerで画像保存できない
CoreImageでエフェクトした画像がUIActivityViewControllerで画像保存できなくて困っています。
下記のようなコードを作りました。
myCameraButtonAction()→myShareButtonAction()と実行する時は、ただしくカメラロールに画像保存できるのですが、
myCameraButtonAction()→myEditButtonAction()→myShareButtonAction()と実行すると、カメラロールに画像が保存できなくなります。
シュミレーターでbreakして確認したところ、myEditButtonAction()すると、myImageView.imageの画像がQuickLookで確認すると画像が表示できなくなるようです。
CIFilterでエフェクト終わってCIImage→UIImageの箇所がおかしい気がしますが、何が悪いのかがわかりません。
ご伝授お願いします。
class ViewController: UIViewController , UINavigationControllerDelegate , UIImagePickerControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBOutlet weak var myImageView: UIImageView!
@IBAction func myCameraButtonAction(sender: AnyObject) {
let alertController = UIAlertController(title: "画像選択", message: "取得先を選択してください", preferredStyle: .ActionSheet)
if UIImagePickerController.isSourceTypeAvailable(.Camera) {
let camraAction = UIAlertAction(title: "カメラ", style: .Default) { (UIAlertAction) -> Void in
let ipc : UIImagePickerController = UIImagePickerController()
ipc.sourceType = .Camera
ipc.delegate = self
self.presentViewController(ipc, animated: true, completion: nil)
}
alertController.addAction(camraAction)
}
if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary) {
let camraLibraryAction = UIAlertAction(title: "フォトライブラリー", style: .Default) { (UIAlertAction) -> Void in
let ipc : UIImagePickerController = UIImagePickerController()
ipc.sourceType = .PhotoLibrary
ipc.delegate = self
self.presentViewController(ipc, animated: true, completion: nil)
}
alertController.addAction(camraLibraryAction)
}
let cancelAction = UIAlertAction(title: "キャンセル", style: .Cancel, handler: nil)
alertController.addAction(cancelAction)
presentViewController(alertController, animated: true, completion: nil)
}
@IBAction func myShareButtonAction(sender: AnyObject) {
if myImageView.image != nil {
let controller = UIActivityViewController(activityItems: [myImageView.image!], applicationActivities: nil)
presentViewController(controller, animated: true, completion: nil)
}
}
@IBAction func myEditButtonAction(sender: AnyObject) {
if myImageView.image != nil {
let rotate = myImageView.image!.imageOrientation
let inputImage = CIImage(image: myImageView.image)
let sepiaFilter = CIFilter(name: "CISepiaTone")!
sepiaFilter.setValue(inputImage, forKey: kCIInputImageKey)
sepiaFilter.setValue(myEffectAdjustSlider.value, forKey: "inputIntensity")
let outputImage = sepiaFilter.outputImage
myImageView.image = UIImage(CIImage: outputImage!, scale: 1.0, orientation: rotate)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
myImageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
dismissViewControllerAnimated(true, completion: nil)
}
}