Exif ファイルの覗き方 Nikon D500 の Raw および TIFF
バイナリーエディターを使って画像ファイルを覗いてみた。
サンプルファイルは、Nikon D500 の Raw データ。
NX Studio で書き出した TIFF 画像も確認したが、Raw と同様だった。
D800E の Raw と TIFF も同様だった。ただし D800E の Raw はビッグエンディアンで書かれていた。
ファイル名および撮影情報
20170304_DSC_2980.NEF, 2017-03-04 11:40:55, NIKON D500, , F7.1, 1/1250sec, ISO7200
記載したデータについて
文中に画像として貼り付けた罫線のない表がデータの説明である。
左端:アドレス(10進表記)
中央:データ(16進表記)
右端:簡単な説明
表のデータ部のうち、IFD のデータエントリー(12バイト)については、次のように4つに区切って表示した。
1111 2222 33333333 44444444
タグ(2バイト)
タイプ(2バイト)
データの個数(4バイト)
データまたはデータへのオフセット(4バイト)
一塊のIFDの構成はつぎのとおり
先頭の2バイト:エントリーの個数
続くデータ:個数分のデータエントリー(1個あたり12バイト)
最後の4バイト:データの終端または継続データへのオフセット
ヘッダー部
アドレス 0 に 4949 とある。バイトオーダーである。4949 はリトルエンディアンであることを示す。このアドレスが、Exif 関連のオフセットの基準となる。
アドレス 4 に最初のデータへのオフセットが書かれている。08000000 はリトルエンディアンで書かれているので、ビッグエンディアンに直すと、00000008、10進数表記では 8 である。
基準のアドレス 0 から 8 バイトオフセットしたところ、つまりアドレス 8 が、最初のデータの先頭である。
プライマリーエントリー
Exif IFD
プライマリーエントリーの 6987(ビッグエンディアンに直すと 8769、アドレス298)が Exif IFD へのポインターである。最後の4バイト 68320000 は、データへのオフセットである。ビッグエンディアンに直すと 3268 であり、10進での表記は 12904 である。
アドレス 0 から 12904 オフセットしたところ、つまりアドレス 12904 が Exif IFD の先頭である。
GPS IFD
プライマリーエントリーの 2588(ビッグエンディアンに直すと 8825、アドレス310)は、このデータが GPS IFD へのポインターであることを示す。最後の4バイト 5cb20200 は、データへのオフセットである。ビッグエンディアンに直すと 2b25c、10進表記は 176732 である。
アドレス 0 から 176732 オフセットしたところ、つまりアドレス 176732 が GPS IFD の先頭である。
MakerNote IFD
Exif IFD の 7c92(アドレス 13062)がメーカーノートへのポインターである。オフセットは 74340000。ビッグエンディアンでは 3474、10進表記は 13428 である。
アドレス 0 から 13428 オフセットしたところ、つまりアドレス 13428 がメーカーノートの先頭である。
データまたはデータへのオフセットということ
1個の IFD エントリーのサイズは 12バイト。その最後の 4バイトには、データかデータへのオフセットのどちらかが書かれている。データが 4バイトに収まらない場合には、オフセットが書かれているのである。
データのタイプ別に、データ1個あたりのサイズ(バイト)が決まっている。遠tリーには、データの個数が描かれているので、サイズ×個数で、トータルのデータサイズがわかる。それが4バイトを超える場合、データは別な場所に書かれ、4バイトには、オフセットが書かれるわけである。
オフセットが書かれている場合には、基準の位置からオフセットした場所にデータを読みにいく必要がある。
参考
デジタルスチルカメラ用画像ファイルフォーマット規格 Exif 2.3
https://www.cipa.jp/std/documents/j/DC-008-2012_J.pdf
Metadata reference tables
Nikon の makernote のタグの意味は、上のサイトを参照。
Exif について大部理解が進んだと思うので、記事にまとめた。
まだまだ間違って解釈しているところがあるかもしれない。
t.koba
この記事が気に入ったらサポートをしてみませんか?