2010年4月13日火曜日

iPhoneアプリで撮った写真は基本的にEXIF情報がなくなる

iPhone用のEXIFライブラリを調べている間に、気になることがあった。

どうやら、iPhoneアプリで撮った写真にはEXIF情報が含まれないらしい。実際、手持ちのカメラアプリで試してみると、確かにどれもEXIF情報が欠落している。


なぜEXIF情報が欠落するのか?

Stepcase >> Blog Archive >> Slow photo saving and lack of EXIF with the iPhone API

・・・The problem actually lies with UIImage, the data parameter that feeds into UIImageWriteToSavedPhotosAlbum. UIImage actually strips off any extra EXIF information on the image, even if you try to add them with library such as iphone-exif.・・・

UIImageWriteToSavedPhotosAlbumを使って画像を保存すると、EXIFデータがまったくない状態で保存されるらしい。しかも、iphone-exifなどのライブラリを使って自分でわざわざ追加したとしても削除される、と。

この方は自分もお世話になっている「Darkroom」(AppStoreへ)というアプリの作者の方らしい。丁寧にもサンプルコードまであって、実際にやってみたら、やはりダメだった。


EXIF情報の付加は可能か?

カメラロールに保存した画像に Exif 情報を付与するという無茶に成功しました - iPhone / iPod touch プログラミングメモ - iPhoneアプリ開発グループ

・・・カメラアプリに限らず、画像を保存する場合は UIImageWriteToSavedPhotosAlbum を使って保存しますが、ご存知の通り、これには Exif 情報は入りません・・・一旦 UIImageWriteToSavedPhotosAlbum で保存して、その後保存したファイルに対して Exif を入れるっていう処理をしました・・・あっさり審査にも通りました・・・

こちらの方は「Cropping Camera」(AppStoreへ)というアプリの作者の方らしいが、やはり同様のようだ。

ただ、いったん保存して「/var/mobile/Media/DCIM/ 」から画像を読み出して独自にEXIF情報を付けるという荒業を編み出されたらしい。実際にアプリを試してみたら、確かにジオタグが入っていた。すばらしい!

EXIFライブラリとして例のGPLライセンスのiphone-exifを使われているようで、そのためソースも公開されていた。

とにかく、これで、アプリで撮った写真にEXIF情報を付加することは可能だということが証明された。あとは、iphone-exifを使わずにEXIF情報を付けられるかどうか・・・


もうソース公開にすれば?

しかし、問題はソースを公開するかどうかということだけで、無料だろうが有料だろうが構わないというのもGPLだ。そしたら、もうソース公開にすれば?とも思えてきた。ただ、正直、ものにもよるなぁ。

とにかく、iPhoneでEXIFを操作するのは大変だということがわかった。

しかし、納得いかないのは、なぜiPhoneの標準カメラアプリだけそれができるのか、ということだ。きっとEXIF操作ライブラリを内部に持っているに違いない。それを開発者に公開してくれれば、みんなこんな苦労はしないのに・・・

10.04.15追記:
ついにAppleは公開してくれた!
琴線探査: iPhone OS4.0はEXIFサポートだ! 悶々とする日々は終わった。