Exif に JPEG のサムネイルデータを付加した際に、その JPEG データの位置を JPEGInterchangeFormat タグで表しますが、規格書に疑問点があります。
Exif の規格書「デジタルスチルカメラ用画像ファイルフォーマット規格 Exif 2.32」 (CIPA DC-008-2019) には、JPEGInterchangeFormat タグについて以下の説明があります。
■ JPEG の SOI へのオフセット JPEGInterchangeFormat
JPEG 圧縮サムネイルデータの先頭バイト(SOI)へのバイトオフセット。サムネイルが JPEG 圧縮の場合にのみ用いる。主画像の JPEG データには記録してはならない。
これを見ると、JPEGInterchangeFormat は JPEG データのバイト位置を格納すればいいように見えます。
しかし、同規格の「附属書 A 画像ファイル記載例」の「A.3 JPEG 圧縮(4:2:2)ファイル」に掲載されている例ではこの説明と異なっています。
以下の表は掲載されている例のサムネイルの部分を抜き出したものです。
(Offset 以外の数値はリトルエンディアン)
1st IFD | Offset (Hex) | Name | Entry Number (Hex) | |||
---|---|---|---|---|---|---|
02C4 | Number Of Entries | 0700 | ||||
Offset (Hex) | Name | Tag ID (Hex) | Type (Hex) | Count (Hex) | ValueOffset (Hex or "ASCII") | |
02C6 | Compression | 0301 | 0300 | 01000000 | 01000000 | |
02D2 | XResolution | 1A01 | 0500 | 01000000 | 1E030000 | |
02DE | YResolution | 1B01 | 0500 | 01000000 | 26030000 | |
02EA | ResolutionUnit | 2801 | 0300 | 01000000 | 02000000 | |
02F6 | JPEGInterchangeFormat | 0102 | 0400 | 01000000 | 2D0E0000 | |
0302 | JPEGInterchangeFormatLength | 0202 | 0400 | 01000000 | FF0A0000 | |
030E | YCbCrPositioning | 1302 | 0300 | 01000000 | 02000000 | |
Offset (Hex) | Name | Offset (Hex) | ||||
031A | Next IFD Offset | 00000000 | ||||
Value longer than 4Byte of 1st IFD | Offset (Hex) | Data (Hex or "ASCII") | Name | |||
031E | 4800000001000000 | XResolution Value | ||||
0326 | 4800000001000000 | YResolution Value | ||||
Thumbnail Image Data | Offset (Hex) | Name | Data | |||
032E | Thumbnail Data | (JPEG Stream) |
これを見ると、サムネイルデータの開始位置は 032E ですが、JPEGInterchangeFormat の ValueOffset はなぜか 2D0E0000 になっています。
サムネイルデータの先頭バイトへのバイトオフセットというのであれば、2E030000 となるように思うのですが。
この 2D0E0000 というのは、どうも 「032E (サムネイルのデータ位置) + 0AFF (JPEGInterchangeFormatLength) = 0E2D」となっているようです。
ということは、この例では JPEGInterchangeFormat は JPEG データの最後 (EOI) の次の位置を表しているようですが、なぜそうなっているのかが不明です。
私が何か勘違いをしているのでしょうか。
0 件のコメント:
コメントを投稿