Hatena::Groupiphone-dev

iOS プログラミングメモ

2009-09-20 (Sun)

カメラロールに保存した画像に Exif 情報を付与するという無茶に成功しました 16:42  カメラロールに保存した画像に Exif 情報を付与するという無茶に成功しました - iOS プログラミングメモ を含むブックマーク

カメラアプリに限らず、画像を保存する場合は UIImageWriteToSavedPhotosAlbum を使って保存しますが、ご存知の通り、これには Exif 情報は入りません。

そんな時、あるアプリの挙動を見ていたら不可思議な事に気が付きました。GoodReader と言うアプリなんですけど、このアプリ、USB で接続して /var/mobile/Media/DCIM/ にファイルを転送すると、そのファイルがアプリ内で読めるんですね。これ自体は SkyBook も対応しているし特に珍しい事もないのですが、GoodReader だとこれらのファイルのリネームや削除が出来たんですよ。実は SkyBook でこの USB の機能を作った時に、削除などの書き込み系の処理は動かない事を確認していたので、ちょっとびっくりしました。いわゆる sandbox の外にこんな自由に書き込める領域が??ほんと??って感じでした。

で、肝心の DCIM ディレクトリなんですけど、例の UIImageWriteToSavedPhotosAlbum で保存したファイルが入るわけですよ。なんと。これはつまり、そこに画像を直接置いちゃえば Exif いけるんじゃね?となったわけです。

試してみると、普通にファイルを置いただけじゃうまい具合に認識されなかったので、一旦 UIImageWriteToSavedPhotosAlbum で保存して、その後保存したファイルに対して Exif を入れるっていう処理をしました。結構あっさり出来て、あとは審査次第だなーという事で、審査に出してみたら、これまたあっさり審査にも通りました。もはや、宣伝用のアプリと化してますが、個人的に、ズーム処理した上で GPS 埋め込んでくれるのは欲しかったので、気に入ってます。あと、余計な所でリジェクトされたくなかったので、カメラの部分は標準APIで作りました。

というわけで、その CroppingCamera のソースは github に上げました。

なんとか解決したい問題として、iPhoto 上でのサムネイル表示対応が挙げられます。サムネイル情報、どっか消えちゃうんですよね…。あとは、Exif 書き込みに使っているライブラリ iphone-exif のライセンスが GPL なので、もうちょっとゆるいライセンスのライブラリを使って書き直せればなーと。そうじゃないと、あんま使う人いなそう。exiftagsBSD なのでこっちを使いたかったんですが、やり方わかんねって感じで無理でした。誰かやってくれないかしら。

なんというか、このせいで DCIM ディレクトリの書き込み権がなくなるんじゃね?って気がしないでもないんですけど、もともと権限ある方がおかしいので、大丈夫だよね!

paellapaella2009/09/20 19:30自分の日記でid:ktakayamaさんのアプリのことを書こうと思っていたのですが、先に書かれていたようですのでコメントで勘弁してください。

これは正直、すごいことだと思います(色々な意味で)。これまでの全カメラアプリは仰られている制限のせいでExif情報が抜けてしまっていましたしね。知っている限りでは世界初じゃないかと。
さっそく参考にさせていただきます。


ちなみに自分も同じようなことを考えていて、そのアイデアでは
「正規のExif付データにJPEGの偽装ヘッダをセット、UIImagePickerの中ではそのヘッダだけが剥がされる」→「カメラロールの中には正規のExif情報が残っている」
という方法でした(まだアイデアだけでしたが)。
・・・私の方がギリギリですよね。 ;-)

ktakayamaktakayama2009/09/22 12:37このやり方は、今後の保証がまったくないですからねー。
早く純正の機能で対応して欲しいところです。

偽装のやり方は、もしうまくいくなら、それはそれで面白いですね。
ぜひチャレンジして欲しいと思います。

amru_1957amru_19572009/11/05 00:27 私も真似して無事Exif情報を付加出来ました。GPLライセンスはいやなので、exifヘッダーにパッチを当てるような感じでつくり、無事iPhotoでも撮影位置に配置されるようになりました。
 カメラロールの画像特定方法は、画像ファイル名称でしていますが、今のところ問題ないようです。

トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20090920