なんとなく、UIImageやNSImageで取り出せると思ってたけど、違いました。
結構手順が必要です。
具体的には、UIImage等には、EXIF情報はなくて、そのままでは取得できない。
実際は、EXIFの情報は、JPGファイルに存在するので、そのファイルにアクセスすることが必要。
ここでは、UIImagePickerで選択したファイルから取得する方法を説明します。
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { self.imageView.image = info[.editedImage] as? UIImage self.exif = nil if (self.imageView.image != nil) { if let imgURL = info[.imageURL] as? URL, let ciImage = CIImage.init(contentsOf: imgURL), let exif = ciImage.properties[kCGImagePropertyExifDictionary as String] as? [String:Any]{ self.exif = exif print(exif[kCGImagePropertyExifDateTimeOriginal as String]) } } dismiss(animated: true, completion: nil) }
手順1
Image取得できているか確認
まずは、UIImagePickerのコールバックでイメージが取得できたか確認。編集されていないものなら.originalImageで取得。ここでは、ユーザーに編集を許可しているダイアログを使用しているため、.editedImageを使用。
手順2
imageへのパス取得
残念ながら渡されるUIImageのデータからは取得できないので、Imageの元となったファイルへのパスを、imgURLとして取得
手順3
CIImageの作成
取得したパスに存在するファイルからCIImageを作成します。
手順4
CIImageからEXIFの取得
このCIImageからEXIF情報を取得できるので、prorpertiesに保存されているEXIF情報を取得。キーは、kCGImagePropertyExifDictionaryを使って取得できる。戻り値のタイプは、[String:Any]
手順5
EXIFから取得してみる
例えば、撮影日として、kCGImagePropertyExifDateTimeOriginalを使用するならば、辞書から取得できる。(厳密には取得できるかもしれないし、取得できないかもしれないので、毎回のチェックが必要のハズ)
取得できるかもしれないキーの一覧は、Appleのドキュメントを参照のこと。
取得できるかもしれないキーの一覧は、Appleのドキュメントを参照のこと。
Sponsor Link