4

JPG から Exif 情報を抽出するコードを書き込もうとしています。

Exif は、JPG ファイルの APP1 セグメントに格納されます。Exif 仕様によると、APP1 セグメントのフォーマットは次のように始まるはずです。

FF E1        // APP1 segment marker
nn nn        // Length of segment
45           // 'E'
78           // 'x'
69           // 'i'
66           // 'f'

そして、 の後にorFF以外の何かが続くまで続きます。FF00

16 進エディタで JPG を見るFF E1と、Exif文字列はわかりますが、長さのバイトをデコードするのに問題があります。例: 1 つの jpg で、16 進エディターは APP1 セグメントの長さが 686 バイトであることを教えてくれますが、長さのバイトはF7 C8.

これらのバイトをどのように使用して 686 10 進を計算する必要がありますか?

編集:サンプルファイルの最初の部分は次のとおりです。

FF D8 FF E1 F7 C8 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08

編集:実際、ここで何が起こっているのか知っているかもしれません。APP1 セグメントは実際に他のセグメントを「含んでいます」か? たとえば、サムネイル データが APP1 内にあると見なされた場合、その長さはより合理的に見えます。誰でもこれを確認/拒否できますか?

4

2 に答える 2

3

APP1 セグメントにはサムネイルが含まれていることがわかり (リンクされた EXIF ドキュメントを参照し、論理ページ 12 までスクロールします)、686 はニシンです (おそらくサムネイルまでのバイト数)。F7C8 は DQT セグメントまでの実際のバイト数であり、サムネイルが含まれているため非常に大きいです。

于 2010-04-02T11:49:20.870 に答える
1

できません。これらのバイトは 686 を表していませんが、長さのバイトは "Exif" 文字列の前にあります。

ファイルを見なければ、診断することは不可能です。ファイルの最初の 20 hex バイトを投稿するとよいでしょう。

于 2010-04-02T00:30:46.707 に答える