【问题标题】:JPG segment length encodingJPG 段长度编码
【发布时间】: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 后跟FF00 以外的其他内容。

在十六进制编辑器中查看 JPG,我可以看到 FF E1Exif 字符串,但我无法解码长度字节。一个例子:在一个 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)。

标签: jpeg exif


【解决方案1】:

事实证明,APP1 段包含缩略图(请参阅链接的 EXIF 文档并向下滚动到逻辑页面 12),因此 686 是一条红鲱鱼(可能是缩略图之前的字节数)。 F7C8 是直到 DQT 段的实际字节数,它很大,因为它包含一个缩略图。

【讨论】:

    【解决方案2】:

    你不能。这些字节不代表 686,但长度字节确实在“Exif”字符串之前。

    没有看到文件,就无法诊断。最好发布文件的前 20 个十六进制字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多