JPEG图像的第2个和第3个字节是否始终是APP0或APP1标记?

Kea*_*her 6 jpeg file-format exif

我有一些不同的JPEG图像,我一直在测试.据我所见,第0个和第一个字节总是0xFF0xD8.

第二和第三是通常要么0xFF0xE0(APP0)表示是一个JFIF段或JFIF扩展段或0xFF0xE1指示EXIF段(APP1).

我的问题:这种情况总是如此吗?第2和第3个字节是APP0还是APP1?

Eri*_*rik 9

没有.例如,有几个相机可以创建没有这些标记的JPEG或其他APP标记.您唯一可以依赖的是SOI序列,FF D8甚至EOI都不是由所有摄像机生成的.另请注意,存在嵌入JPEG的JPEG - 您可以在图像中嵌套SOI/EOI.

如果你需要在原始相机图像中处理嵌入的JPEG数据,那么几个模型会产生类似JPEG的数据,这些数据只能通过jpeg规范稍微松散来解析 - 特别是与FF数据中的转义字节有关.然后你有相机产生专有数据,乍一看看起来像jpeg数据(例如索尼的一些"加密"原始格式)

  • 旁注:超过 99% 的样本 JPEG(来自各种相机)*确实* 有 APP0/APP1 - 我提到的例外情况并不常见,您实际上不需要在通用解析器中处理它们 (3认同)
  • 我真的不明白为什么你会想要硬编码到你的解析器中以期望数据,当你可以只编程它来一次读取一个段并根据它的头处理它. (3认同)