Exif ファイルの覗き方 Nikon D800E の JPEG
バイナリーエディターを使って画像ファイルを覗いてみた。
サンプルファイルは、Nikon D800E で撮影した Raw データを、NX Studio を使って JPEG に書き出したもの。
D500も似たようなものだった。
ファイル名および撮影情報
20220116_094648_DSC_8354.JPG, 2022-01-16 09:46:48, NIKON D800E, , F2.8, 1/125sec, ISO3200
記載したデータについて
文中に画像として貼り付けた罫線のない表がデータの説明である。
左端:アドレス(10進表記)
中央:データ(16進表記)
右端:簡単な説明
表のデータ部のうち、IFD のデータエントリー(12バイト)については、次のように4つに区切って表示した。
1111 2222 33333333 44444444
タグ(2バイト)
タイプ(2バイト)
データの個数(4バイト)
データまたはデータへのオフセット(4バイト)
一塊のIFDの構成はつぎのとおり
先頭の2バイト:エントリーの個数
続くデータ:個数分のデータエントリー(1個あたり12バイト)
最後の4バイト:データの終端または継続データへのオフセット
ヘッダー部
ファイルの先頭が、SOI、ファイルの始まりを示すマーカーである。
APP0 セグメントとAPP1 セグメントがそれに続く。
アドレス 30 に 4949 とあり、リトルエンディアンで書かれていることを示している。このアドレス 30 が、Exif 関連のオフセットの基準位置である。
プライマリーエントリー
アドレス 34 に最初のデータへのオフセット 08000000 が書かれている。ビッグエンディアンに直すと 00000008 である。10進数表記は、8。
最初のデータの先頭は、そこから8バイトオフセットしたところになるので、30 + 8 = 38 となる。
データの最後に 92100000 とあったので、データがまだあると思い、オフセット先を読みに行った。が、そこには意味のわからないデータが書かれていた。
アドレス 196 のタグが、2588、ビッグエンディアンに直すと 8825 である。これは GPS IFD へのポインターを表すのだが、調べた限りでは、8825 より後(数字が大きな)のタグは互換性 IFD へのポインター(A005.H)くらいと思われた。
よって、8825 か、A005 がある場合には A005 をエントリーの最後とみなして良いと思われる。
Exif IFD
プライマリーエントリーの、6987(ビッグエンディアンで 8769)が Exif IFD へのポインターである。
データは、94010000。ビッグエンディアンに直すと、00000194、10進表記では、404。基準位置が 30 なので、Exif IFD の始まりは、30 + 404 = 434 である。
GPS IFD
プライマリーエントリーの、2588(ビッグエンディアンで 8825)が GPS IFD へのポインターである。
データは、fa030000。ビッグエンディアンに直すと、000003fa、10進表記では、1018。基準位置が 30 なので、30 + 1018 = 1048 が GPS IFD の先頭である。
MakerNote IFD
Exif IFD の 7c92(アドレス 616)がメーカーノートへのポインターである。オフセットは 0c040000(ビッエンディアン 0000040c)、10進表記は 1036。30+1036 = 1066 がメーカーノートの先頭である。
データまたはデータへのオフセットということ
1個の IFD エントリーのサイズは 12バイト。その最後の 4バイトには、データかデータへのオフセットのどちらかが書かれている。データが 4バイトに収まらない場合には、オフセットが書かれているのである。
データのタイプ別に、データ1個あたりのサイズ(バイト)が決まっている。遠tリーには、データの個数が描かれているので、サイズ×個数で、トータルのデータサイズがわかる。それが4バイトを超える場合、データは別な場所に書かれ、4バイトには、オフセットが書かれるわけである。
オフセットが書かれている場合には、基準の位置からオフセットした場所にデータを読みにいく必要がある。
参考
デジタルスチルカメラ用画像ファイルフォーマット規格 Exif 2.3
https://www.cipa.jp/std/documents/j/DC-008-2012_J.pdf
Exif について大部理解が進んだと思うので、記事にまとめた。
まだまだ間違って解釈しているところがあるかもしれない。
t.koba
この記事が気に入ったらサポートをしてみませんか?