CIFilter した画像を UIImageWriteToSavedPhotosAlbum で保存できない

CIFilter したUIImageを UIImageWriteToSavedPhotosAlbum で保存できない。CIFilter を適用する前のUIImageは、保存できる。

原因

CIFilterを適用後、CIImageから UIImage を作成したときにプロパティがNULL になっているため。

参考

UIImageWriteToSavedPhotosAlbum() doesn’t save cropped image

CoreImageでエフェクトした画像がUIActivityViewControllerで画像保存できない

対応

    func savePhoto(image: UIImage)
        let ciImage = image?.ciImage
        let ciContext = CIContext(options: nil)
        let cgImage = ciContext.createCGImage(ciImage!, from: ciImage!.extent)
        let uiImageToSave = UIImage(cgImage: cgImage!, scale: 1.0, orientation: .up)
        
        UIImageWriteToSavedPhotosAlbum(uiImageToSave,
                                       self, #selector(didFinishSavingImage), nil)
    }
    
    // エラーの場合アラートを出力
    @objc func didFinishSavingImage(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) {
        if error != nil {
            let alertController = UIAlertController(title: "Error", message: "Save Error", preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
            self.present(alertController, animated: true, completion: nil)
        }
    }

投稿者: admin

Free Software Engineer

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です