#! /bin/blog

実行形式のブログです。というか、ほぼポエムです。

Adobe XMP Toolkit SDKをiOSアプリに組み込んでみた

画像ファイルに埋め込まれているメタ情報の中に、XML形式で格納されたデータがあります。
ざっくり言えば、ExifXML版でしょうか。
XMPというAdobeによって標準化されたフォーマットなんだそうです。

iOSアプリのための、このデータを扱うOSSのライブラリを探してみたところ、Adobe XMP Toolkit SDKというのがありましたので、組み込みんでみました。

詳細は、以下、githubを参照してください。

github.com

正直、スタティックライブラリを生成するまでは、付属のドキュメントに書かれていたので簡単でしたが、それをアプリに組み込むところについては、これといった情報も見つからず、苦労しました。

ところで、画像ファイルのメタ情報は、iOS SDKCore Imageで読み書きできますが、メタ情報が完全じゃなかったり、画像自体が再エンコードされてしまうことは、ご存知でしょうか。

Core Imageを使用せずに、メタ情報を取得する方法の一つとして、Adobe XMP Toolkit SDKを候補にしてみてはいかがでしょうか。

尚、Adobe XMP Toolkit SDKは、Exifを取得できません。

Exifを取得するには、libExifというライブラリがあります。
さまざまなOSのディストリビューションに組み込まれて、なかなか枯れたライブラリです。

GitHub - ryu1/iOS-LibExif

私が動作確認した結果、iOSにアプリに組み込めるのですが、Exifを書きこむと、XMP情報が削除されてしまう問題が発覚しました。

どうことかというと、XMPExifも、JPEGファイル上のAPP1というレイヤーに属しています。
これが変な話しで、XMPExifの両方がある場合、APP1のレイヤが2つだぶった状態になるのです。
libExifは、APP1が1つのみという思想でつくられいるため、XMP情報が書き込まれているAPP1は削除され、Exifが書き込まれているAPP1が残るという現象が発生してしまいました。(もう頭が痛くなってきましたね。)

libExifは、いまはもう、メンテされていないようなので、今後、改善されることはないでしょう。

そんななか、救世主となるのが、Exiv2 というライブラリです。

www.exiv2.org

ExifXMPの両方に対応しているスグレモノです。

これが実は、私の大本命だったです。

でも、iOSアプリに組み込む方法がわからなかった。教えてくれぇ。。。