jpegのexifデータの読み書き(php)
画像プレピュー用の社内ツールを作って欲しいと言われ、
ウェブで公開するものなので、サーバサイド(今回はPHP)で動くものを作った。
画像をアップロードすると、リストアップして、ブラウザでそのまま情報(タイトルとかコメントとか)を編集出来るものです。
データの保存をどうしようか迷ったのだけど、jpegのexifにデータ突っ込んだらデータベースいらずで良いじゃんと、軽いノリで開発をスタートした。
phpでexifを操作できるライブラリを探してみたところ、
pelとphpexifrwというライブラリが存在していた。
exifの仕様として、リンク先のような感じの情報がjpegから読めるようだ
http://jo1upk.blogdns.net/saito/?PHP%2F%E9%96%A2%E6%95%B0%2F%E7%94%BB%E5%83%8F%E9%96%A2%E9%80%A3%2Fexif_read_data
うん、いい感じだ、WINXPにタイトルやらコメントがあるから、
デフォルトのデータフィールド使えそうだし、ウィンドウズでjpegのプロパティを編集すれば、
そのままそのデータをリストに出来るというのも面白いw
ところが、プログラムをはじめてすぐにハマる(汗
pelでマニュアル通りに書いても、なぜかデータが取れない。
修正しようにも、バイナリから読み書きしているので、仕様を調べるのが面倒。
しかもpelはexif規格をオブジェクティブに表現しているので(悪い事ではないのだけど)、
データ取得するのに深い階層までチェックとオブジェクト取得を繰り返すのが面倒だった。
なので、シンプルな作りのphpexifrwを使ってみる・・・
が、そもそもwinxpデータ非対応だった(ガビーン
う~ん。仕様を調べながら、phpexifrwを直すことにした。
で、データ取得まで出来たので、今度は保存をしてみることに・・・・・。
全然できないし!というか、作りかけなのか??
よくソースを読んでみると使えないメソッドとかあるし、pelとくらべるとソースがとても汚い。
う~ん。しょうがないので、pelを修正することに。
結局このごたごたで仕様書を何度も眺めていたので、
pelのクラスのパラメータがどういう意味か今見るとなんとなくわかる!
そして原因もすぐに分かった。
pelでデータがとれなかった原因は、winxpのデータはIfdのタイプがIFD0なのにバリデート用の配列ではEXIFのタイプにグルーピングされていた事だった。
バリデート用の配列をIFD0に修正したら、読み書きができるようになった。
やったー!おめでとうございます!
後日談・・・
項目が大幅に変更になり、デフォルトの項目名ではつじつまが合わないけど、
そのままフィールドを使い続けているので、ローカル編集が出来なく(わかりづらく)なってもうた。
今となると、使うサーバは一緒だしsqliteでも良かった・・・
というのは考えないでおこう。。