写真データからEXIFデータを取り出す方法

なんとなく、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のドキュメントを参照のこと。

コメントを残す

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