【发布时间】:2010-04-02 19:49:20
【问题描述】:
我正在尝试编写一些代码来从 JPG 中提取 Exif 信息。
Exif 存储在 JPG 文件的 APP1 段中。根据the Exif spec,APP1段的格式应该是这样开始的:
FF E1 // APP1 segment marker
nn nn // Length of segment
45 // 'E'
78 // 'x'
69 // 'i'
66 // 'f'
直到出现FF 后跟FF 或00 以外的其他内容。
在十六进制编辑器中查看 JPG,我可以看到 FF E1 和 Exif 字符串,但我无法解码长度字节。一个例子:在一个 jpg 中,我的十六进制编辑器告诉我 APP1 段的长度为 686 字节,但长度字节为 F7 C8。
我应该如何使用这些字节来得出十进制 686?
编辑:这是示例文件的第一部分:
FF D8 FF E1 F7 C8 45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08
编辑:实际上,我想我可能知道这里发生了什么。 APP1 段是否真的“包含”其他段?例如,如果缩略图数据被认为在 APP1 内部,那么该长度似乎更合理。任何人都可以确认/否认这一点吗?
【问题讨论】:
-
您确定 APP1 段不是 63432 字节吗?你怎么知道是686?它可能是 686 加上缩略图的大小。
-
@gabe 我寻找新段的下一个
FF xx标记字节。对吗? -
是的,我希望 FFDB 成为下一个标记 (DQT)。
-
(我很困惑 686 是从哪里来的)
-
@pst 686 是直到下一个标记的字节数,即
FF D8(SOI) 紧跟FF DB(DQT)。