画像ファイルに埋め込まれているメタ情報の中に、XML形式で格納されたデータがあります。
ざっくり言えば、ExifのXML版でしょうか。
XMPというAdobeによって標準化されたフォーマットなんだそうです。
iOSアプリのための、このデータを扱うOSSのライブラリを探してみたところ、Adobe XMP Toolkit SDKというのがありましたので、組み込みんでみました。
詳細は、以下、githubを参照してください。
正直、スタティックライブラリを生成するまでは、付属のドキュメントに書かれていたので簡単でしたが、それをアプリに組み込むところについては、これといった情報も見つからず、苦労しました。
ところで、画像ファイルのメタ情報は、iOS SDKのCore Imageで読み書きできますが、メタ情報が完全じゃなかったり、画像自体が再エンコードされてしまうことは、ご存知でしょうか。
Core Imageを使用せずに、メタ情報を取得する方法の一つとして、Adobe XMP Toolkit SDKを候補にしてみてはいかがでしょうか。
尚、Adobe XMP Toolkit SDKは、Exifを取得できません。
Exifを取得するには、libExifというライブラリがあります。
さまざまなOSのディストリビューションに組み込まれて、なかなか枯れたライブラリです。
私が動作確認した結果、iOSにアプリに組み込めるのですが、Exifを書きこむと、XMP情報が削除されてしまう問題が発覚しました。
どうことかというと、XMPもExifも、JPEGファイル上のAPP1というレイヤーに属しています。
これが変な話しで、XMPとExifの両方がある場合、APP1のレイヤが2つだぶった状態になるのです。
libExifは、APP1が1つのみという思想でつくられいるため、XMP情報が書き込まれているAPP1は削除され、Exifが書き込まれているAPP1が残るという現象が発生してしまいました。(もう頭が痛くなってきましたね。)
libExifは、いまはもう、メンテされていないようなので、今後、改善されることはないでしょう。
そんななか、救世主となるのが、Exiv2 というライブラリです。
これが実は、私の大本命だったです。
でも、iOSアプリに組み込む方法がわからなかった。教えてくれぇ。。。