ディスカッション (11件)
写真データの裏側に潜むメタデータ「Exif」。単なる撮影日時やカメラ情報の記録場所だと思っていませんか?実はこのデータ、画像処理やプログラミングの現場において非常に強力な武器になります。Exifを使いこなすことで、写真管理の自動化やプライバシー管理、あるいはメディア解析まで、エンジニアとしてできることの幅がグッと広がります。改めてExifの奥深さと可能性に光を当ててみましょう。
Exifは便利だけど、念のためのリマインダーを。画像を公開するなら、カメラや編集ソフトが勝手に埋め込む識別情報を削除しておくべきだよ。特に、自宅のGPS座標がブログに乗って誰でも見られる状態になるのは、普通避けたいでしょ。
昔、画像メタデータを抽出するパーサーを書いたことがあるけど、ドキュメント化されていないか、間違っているか、あるいは断片的な属性が山ほどあって本当にイライラしたよ。ネット上にリファレンスはあるけど、画像で見かける情報の半分も載っていないことがほとんど。ありとあらゆる画像処理アプリが独自にデータを追加してるしね。単位もメートル法だったりヤード・ポンド法だったりして、どっちなのか推測するしかない。絞り値もf値だったり、小数だったり、ただの分数文字列だったりするし。未定義データに対する独自の慣習を持つベンダーもある。まさにジャングルだよ。
Exifは最高の意味での「技術的負債」だよね。散らかり放題で古臭いけど、何十年経ってもひっそりと役に立ち続けてる。
ちなみに、最近作った「xv」にインスパイアされた画像エディタpxv(https://github.com/linsomniac/pxv )に、Exifの表示・編集・削除機能を追加したんだ。主目的は、xvをビルドし直さなくても(apt installもできないしね)、昔馴染みの「xv」の操作感を使いたかったから。最近は本物のxvをあまり使ってないし。ただ、xvにはないExif機能や画像アノテーションも追加したし、画像補正機能もかなりxvっぽく強化したよ。
以前、ユーザーがアップロードした写真をWebサイトやメールマガジンで表示する会社で働いていたんだ。ある一部の写真が、Outlookで表示したメールマガジンでだけ表示が崩れるという問題があった。他の場所では問題ないのに。色々調べた結果、ある特定の人(投稿頻度が高い人)がアップロードした写真だけが原因だと分かった。その人が使っていたソフトが、あり得ないExifのDPIデータを入れていたんだ。Outlook以外のレンダラーは無視してたけどね。フォーマットというものは、サポート状況がバラバラな地雷原だよね。でも、実際に使われているってことは、そういう問題も込みってことだし、何もないよりはマシかな。
多くの規格がそうであるように、画像メタデータにはほぼ重複する3つの規格がある。EXIF、IPTC、そしてXMPだ。ちなみにIPTCが最近また注目されていて、生成AI各社が生成画像にIPTCメタデータ[1]を追加しているからだ。ちなみにOpenAIは同じ目的でC2PA[2]という別の規格を使っている。これらすべてについては著者が触れているね。そして、OpenAIとGoogleが生成画像のピクセルに埋め込んでいるSynthID[3]もある。言うまでもなく、互換性はないんだけどね。
Exifは、現代の開発者が考えるような「ファイル形式」とは全く別物だよ。メモリ上のバイナリブロックデータ構造をディスクにそのまま書き出したようなものだ。リソースが限られていた昔のデジカメでは効率的だったんだろうけど、大幅な編集をしようとするとポインター演算が必要になる。メモリ安全な言語しか触ったことのない開発者には、異次元の概念かもしれないね。
「古き良き退屈な標準」って言葉、まさにその通り。Exifが大好き。
商用の画像パイプラインでexiftoolを使うのはおすすめしないな。libexifを使ったり、画像ライブラリで直接タグ付けするのに比べて遅すぎるよ。うちはデータベース代わりにすべてをTIFFタグとExifタグに保存しているけど、対応できない分はYAMLをコメントとして埋め込んでる。
「OSがアップロード時にExifやその他のメタデータを削除してくれると思い込んではいけない」というのは本当にその通り。実際の挙動はソース画像、OS、ブラウザ、ファイル選択ツール、アプリ、エクスポートパス、変換パイプライン、そして受信するサービスに依存するからね。Androidがファイルシステムとアプリの間にフィルタを挟んで、アプリがJPEGを要求したときにEXIFを削除するようになったのはちょっと頭を抱えるよ。ダグラス・アダムスが言ったように、この宇宙はどんどん愚か者を増やしているから(例えばザッカーバーグのアプリは位置情報権限がなくても、画像内のExif GPSタグをスキャンしてどこにいたか特定できる)、その解決策もまた愚かさということなんだろう。