(2020.Aug.29 追記)
UIImagePickerController だけではなく、AVCapturePhotoOutput.capturePhoto で返される情報が保持する metadata についても、同様の情報が返されることを確認しました
Sponsor Link
UIImagePickerController で取得できる情報 / 調べたいこと
JPEG ファイルには、Exif データが付与されている時があり、撮影日時や機材の情報が取得できることがあります。
iPhone 等のデバイスで写真を撮った時には、どのようなメタデータを取得できるのでしょうか?
具体的には、UIImagePickerController を使って、カメラで撮影した時に Info として渡されるデータは、何が含まれているのでしょうか?
# まだ JPEG 等にもなっていないので、JPEG ファイルに保存してから、Exif データをチェックするのは、少し違う気がします。
ということで、UIImagePickerController で渡されてくる メタデータを調べてみました。
調べる対象
以下の環境で調べてます。
- Xcode12 beta3
- iOS 13.5/ iPad Pro 9.7
- func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])で渡されてくるinfo[.mediaMetadata]
調べた結果
大きく以下に分かれます。コールバックに渡される info 自体が NSDictionary なのですが、以下の値をキーにさらに NSDictionary が取得でき、その中に情報が保存されています。
- Exif
- TIFF
- MakerApple
- その他
以下では、
キー値 (保存されていたタイプ) : 取得できた値
意味
として記載してます。
Exif情報
以下のような情報が保持されていました。(数回しかテストしていないので、機種・状況によって異なるデータになっているかもしれません)
# カメラに詳しくないので、キー値を日本語化してますが、意味わかってません。
- DateTimeOriginal (__NSCFString) 値: 2020:08:04 13:14:47
- 撮影日時
- ExposureBiasValue (__NSCFNumber) 値: 0
- 露出
- FocalLenIn35mmFilm (__NSCFNumber) 値: 29
- 35mm換算焦点距離
- BrightnessValue (__NSCFNumber) 値: 2.761715198143849
- 明るさ
- SensingMethod (__NSCFNumber) 値: 2
- 不明
- LensMake (NSTaggedPointerString) 値: Apple
- レンズ製造者
- FNumber (__NSCFNumber) 値: 2.2
- F値
- FocalLength (__NSCFNumber) 値: 4.15
- 焦点距離
- ShutterSpeedValue (__NSCFNumber) 値: 4.906991587796148
- シャッタースピード
- SceneType (__NSCFNumber) 値: 1
- シーンタイプ(?)
- ApertureValue (__NSCFNumber) 値: 2.27500704749987
- 絞り
- SubjectArea (__NSArrayI) 値: (2015, 1511, 2217, 1330)
- 不明
- ColorSpace (__NSCFNumber) 値: 65535
- 色空間
- LensSpecification (__NSArrayI) 値: (“4.15”, “4.15”, “2.2”, “2.2”)
- 不明
- PixelYDimension (__NSCFNumber) 値: 3024
- Y方向サイズ
- WhiteBalance (__NSCFNumber) 値: 0
- ホワイトバランス
- DateTimeDigitized (__NSCFString) 値: 2020:08:04 13:14:47
- デジタル化された日時
- OffsetTimeOriginal (NSTaggedPointerString) 値: +09:00
- 撮影時の時差
- ExposureMode (__NSCFNumber) 値: 0
- 露出モード
- ISOSpeedRatings (__NSSingleObjectArrayI) 値: (80)
- ISO
- OffsetTimeDigitized (NSTaggedPointerString) 値: +09:00
- デジタル化された日時の時差
- ExifVersion (NSTaggedPointerString) 値: 0232
- Exifバージョン
- PixelXDimension (__NSCFNumber) 値: 4032
- X方向サイズ
- OffsetTime (NSTaggedPointerString) 値: +09:00
- 時差
- ExposureTime (__NSCFNumber) 値: 0.03333333333333333
- Flash (__NSCFNumber) 値: 24
- フラッシュ
- SubsecTimeDigitized (NSTaggedPointerString) 値: 825
- 不明
- LensModel (__NSCFString) 値: iPad Pro back camera 4.15mm f/2.2
- レンズモデル
- SubsecTimeOriginal (NSTaggedPointerString) 値: 825
- 不明
- ExposureProgram (__NSCFNumber) 値: 2
- 露出プログラム
- MeteringMode (__NSCFNumber) 値: 5
- 測定モード
ExifVersion が 232 となっていますので、Exif の規格を調べると上記項目の詳細が分かると思います。(が、自分は日付にしか興味がないので調べてません)
TIFF
Exif と同様に TIFF の情報も取得することができました。
- ResolutionUnit (__NSCFNumber) 値: 2
- 解像度の距離単位(DPI の I)
- Software (NSTaggedPointerString) 値: 13.5.1
- ソフトウェアバージョン
- DateTime (__NSCFString) 値: 2020:08:04 13:14:47
- 日付
- XResolution (__NSCFNumber) 値: 72
- X方向解像度
- Model (NSTaggedPointerString) 値: iPad Pro
- モデル
- YResolution (__NSCFNumber) 値: 72
- Y方向解像度
- Make (NSTaggedPointerString) 値: Apple
- 製造者
こちらも、詳細は、TIFF の仕様を調べると良いかもしれません。
MakerApple
一応、取得できたデータを列挙していますが、さっぱり意味がわかりません。
- 31 (__NSCFNumber) 値: 0
- 1 (__NSCFNumber) 値: 11
- 2 (__NSCFData) 値: {length = 512, bytes = 0x5e00e800 2a01fa00 bc000301 48015900 … 61015401 74013e01 }
- 9 (__NSCFNumber) 値: 4371
- 32 (__NSCFString) 値: D38ADD84-D22E-43CF-A462-3A405A261C1F
- 3 (__NSDictionaryI) 値: {epoch = 0; flags = 1; timescale = 1000000000; value = 2013189778028625;}
- 37 (__NSCFNumber) 値: 0
- 4 (__NSCFNumber) 値: 1
- 43 (__NSCFString) 値: 556A9D0F-97AE-4B6D-B83B-603611661343
- 5 (__NSCFNumber) 値: 156
- 38 (__NSCFNumber) 値: 0
- 23 (__NSCFNumber) 値: 0
- 6 (__NSCFNumber) 値: 149
- 7 (__NSCFNumber) 値: 1
- 39 (__NSCFNumber) 値: 0
- 8 (__NSArrayI) 値: (“-0.740957498550415”, “-0.004542297217994928”, “-0.6542644500732422”)
- 14 (__NSCFNumber) 値: 0
- 20 (__NSCFNumber) 値: 4
- 25 (__NSCFNumber) 値: 0
どこかに、説明ドキュメントはあるのでしょうか??
その他
Infoからキーを使って直接に値を取得できるものがいくつかありました。
- DPIWidth (__NSCFNumber) 値: 72
- 横方向DPI
- DPIHeight (__NSCFNumber) 値: 72
- 縦方向DPI
- Orientation (__NSCFNumber) 値: 1
- 向き
- kCGImageDestinationICCProfile (__NSCFData) 値: {length = 548, bytes = 0x00000224 6170706c 04000000 6d6e7472 … 000003dc 0000c06e }
- ICCProfileに関係してそうです
まとめ
.mediaMetadata のデータを列挙してみました。撮影した写真から、画像データ以外を取得したくなった時に、上記の項目がスタート地点になりそうです。
(2020.Aug.29 追記)
AVCapturePhotoOutput.capturePhoto で返される AVCapturePhoto の保持する metadata も同様の情報を持っていました。
説明は以上です。
Sponsor Link