highlights

2017年1月23日月曜日

[Swift3] カメラで写真を撮るときアルバムに保存しつつUIImageとパスを取得する方法

やりたいこと

ImagePickerControllerでカメラで撮った写真をアルバムに保存しつつ、処理を継続したい。

メリット

カメラロールで選択する場合とカメラで写真を撮る場合の処理を共通化できる。
あと、基本的に写真で撮った情報はアルバムに保存したほうが、ユーザーフレンドリーだと思う。

諸問題

カメラで撮った画像は、何故か傾きの情報が失われている。表示されている画像をもう一度描画することで解決できる。
(参考サイト)http://blog.katty.in/105

コード
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) {
        if info[UIImagePickerControllerOriginalImage] != nil {
            var image = info[UIImagePickerControllerOriginalImage] as! UIImage
            
            // カメラで撮影した場合、一旦画像をアルバムに保存してからパスを得る
            if let refURL = info[UIImagePickerControllerReferenceURL] as? NSURL {
                // アルバムから取得した場合はUIImageもパスも取得できている
            } else {
                // カメラから取得した場合
                let lib: ALAssetsLibrary = ALAssetsLibrary()
                
                // なぜか傾く不思議。一度書き直す ===========
                UIGraphicsBeginImageContext(image.size)
                image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
                image = UIGraphicsGetImageFromCurrentImageContext()!
                UIGraphicsEndImageContext()
                // =================================

                lib.writeImage(toSavedPhotosAlbum: image.cgImage, orientation: .up, completionBlock: { (url, error) -> Void in
                    if error != nil {
                        // 権限がないなど、エラーが起こった
                        self.dismiss(animated: true, completion: nil)
                    } else if let url = url {
                        // パスが取得できた
                    } else {
                        // パスが取得できなかった
                    }
                })
            }
        }
    }

0 件のコメント:

コメントを投稿