- blogs:
- cles::blog

EXIF からレンズ名を取得する(Panasonic編)


NP_Exif で画像の EXIF 情報は出力できるようにしているのですが、レンズが増えてくると、焦点距離よりもレンズ名が表示したくなります。
ということで、レンズ名をプログラムで取得して表示する方法について調べてみました。
生の EXIF データを眺めて見てみると LEICA DG MACRO-ELMARIT 45/F2.8 のような文字はあるので、とりあえずきちんとパースできればデータを取り出すことはできそう・・・・というところまではすぐに分かったのですが、ここから一筋縄ではいきませんでした。どうもこのデータが入っている部分は MakerNotes と呼ばれるメーカー独自の記録領域で php に含まれている read_exif_data() で Panasonic機(GF1 / GX1)の EXIF をパースすると 8kB のバイナリデータとしてしかアクセスすることができませんでした。
とりあえず中身については解析してくれている人がいて、ある程度フォーマットも明らかになっている*1ようなので、これに対応したパーサーを捜してみたところ、下記のものが見つかったので今回はこれを使うことにしました。
以下、作業メモ。
† サンプルを動かしてみる
アーカイブを解凍すると、テスト用に Example.php が出てきますが、今回はライブラリとして使いたいので下記のようなテストスクリプトを書きました。データの参照がID表記なのでちょっとわかりにくいですが、下記の34665がExif IFD、37500はMakerNoteを表しています。最後の 81 は Panasonic のカメラのレンズ名を表すIDです。カメラメーカーによってこのあたりは変化するので、自分で開発を行う場合にはコメントアウトしてある部分を有効にして、膨大なデータの全体像を見てから目的の部分を絞り込んでいくと良いと思います。
exiftest.php
上記を基に NP_Exif に手を加えてレンズ名が表示されるようにしてみました。
† 2013/05/03 追記
ニコン機の場合のプログラミング方法をまとめました。
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4675
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
はじめまして。レンズ名の表示方法について調べていて、こちらのブログに辿りつきました。
The PHP Metadata Toolkitとexiftest.phpのコードで$exifの中身をvar_dumpで表示させるところまではできたのですが、肝心のレンズIDがどこにあるのかわからず途方にくれています。。
Decoded Dataというもの自体見あたらないのですが、、、
ご教授頂れば幸いです。
exif に書かれているレンズの情報はメーカーごと(場合によっては機種ごと)に違うので、
上記の方法は Panasonic の Lumix シリーズにしか使えません。
詳細な情報については JpegAnalyzer Plus ( https://blog.cles.jp/item/4680 ) を使ったり、
お使いのカメラの exif 仕様を調べていただいたりするのが近道かとおもいます。
ご回答ありがとうございます。
根本的に解釈が間違っていたみたいです。
試してみます!
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110842)
3 . 年次の人間ドックへ(110427)
4 . 2023 年分の確定申告完了!(1つめ)(109966)
5 . 三菱鉛筆がラミーを買収(109866)