撮影した写真データには標準で色んな情報が書き込まれています.
そのデータをショートカットを使って取り出してみます.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS15.3.1
スポンサーリンク
ダウンロードと使い方
レシピを起動し、写真を一枚選択することで画像のように26項目を表示します.
(画像では露出時間のキーを誤ったため異なる結果になっています)
測光方式の値がなぜか取り出せませんでした、対応していない写真を選んだ可能性もあります.
ちなみに対象がスクリーンショットになるとほとんどの値が空になります.
メタデータの情報を取り出すには
ショートカットには既に「イメージの詳細を取得」というアクションがあります.
このアクションに欲しい情報があればいいのですが、シャッタースピードやF値といった情報はここからでは取り出せません.
コンテンツグラフはもちろん、写真アプリからそれらの情報がちゃんと存在することは容易にわかるのですが、それをショートカットでどう取り出すのか…が問題です.
これを解決したのは「名前を設定」アクションでした.
これを使って写真自身の拡張子をjsonにします.
そのJSONの中身を見ると・・・
画像のような結果を返します(実際には下にもっと続きます).
知識不足ですべてのキーの意味が分かるわけではないですが、少なくとも以下の情報が存在することがわかります.
キー | 値 |
---|---|
{TIFF}.Software | OS |
{TIFF}.DateTime | 撮影日 |
{TIFF}.Orientation | 画面の向き |
{TIFF}.Model | モデル |
{TIFF}.Make | メーカー |
{Exif}BrightnessValue | 露出値 |
{Exif}.ExposureTime | 露出時間 |
{Exif}.MeteringMode | 測光方式 |
{Exif}.FNumber | F値 |
{Exif}.FocalLength | 焦点距離 |
{Exif}.ShutterSpeedValue | シャッタースピード |
{Exif}.SceneType | シーンタイプ |
{Exif}.ApertureValue | 絞り値 |
{Exif}.PixelYDimension | 実行画像幅 |
{Exif}.WhiteBalance | ホワイトバランス |
{Exif}.ISOSpeedRatings | ISO |
{Exif}.ExposureMode | 露光モード |
{Exif}.LensModel | レンズ |
{Exif}.PixelXDimension | 実行画像高さ |
{Exif}.SensingMethod | センサー方式 |
{Exif}.FocalLenIn35mmFilm | 焦点距離(35mm換算) |
{Exif}.ExposureBiasValue | 露光補正値 |
PixelHeight | 高さ |
Depth | 深度 |
Orientation | 向き |
PixelWidth | 幅 |
見ての通り、「イメージの詳細を取得」にない情報がたくさんあります.
今回はこれを一括で閲覧するレシピを組んだわけです.
レシピ
まず「辞書」アクションを使って、キーにわかりやすい名前を、その値にメタデータのキーを組とします.
必要なものだけでも当然大丈夫です.
この辞書を"contents"とします.
写真を一枚選択し、「名前を設定」アクションで拡張子が"json"となるようにします.
(わざわざ変数におく必要はありませんでした)
この写真をjson化したものを"dict"という名前でおきます.
メタデータの辞書contentsのキーに対して「各項目を繰り返す」を適用します.
辞書contentsの繰返し項目の値、つまり繰返し項目をキーとするメタデータのキーを取り出し、更に"."で分割して最後の項目を取得しておきます.
辞書dictの、上で取得した辞書contentsの値、つまりメタデータのキーによる値を取り出します.
1つ目でメタデータの名前(繰返し項目)、2つ目でメタデータキーの末尾、3つ目で辞書contentsの対応する値を取り出したので「テキスト」アクションで体裁を整え、変数に追加する操作を繰り返し、最後に結果を表示します.
これでレシピは完成です.
〆
スクリーンショットでモデルやメーカーなども空になるのは意外でした.
「名前を設定」は他の分野でも使えるのかもしれませんね.
見ての通り、例えば「画面の向き」や「シーンタイプ」のように数字になっていて直接分からない情報もあります.
とくに「向き」については「イメージの詳細を取得」で具体的に分かるのでこちらに分があります.
双方メリットありデメリットあり…なので状況に応じて使い分けたり両方使うと良いですね.