【发布时间】:2015-06-28 22:03:55
【问题描述】:
我了解 JPEG 文件以 0xFFD8 (SOI) 开头,然后是一些包含元数据的 0xFFEn 段,然后是一些保存压缩相关数据(DQT、DHT 等)的段) 其中最后一个是 0xFFDA (SOS);然后是以 0xFFD9 (EOI) 结尾的实际图像数据。这些段中的每一个都在 JPEG 标记之后的两个字节中声明其长度,因此计算段的结尾/下一段的开始是一个简单的执行,并且可以从 SOS 段的长度计算图像数据的开始.
到目前为止,0xFFD9 (EOI) 的出现是无关紧要的1,因为段是由长度标识的。然而,据我所知,除了在 SOS 段之后找到 0xFFD9(EOI) 标记之外,没有其他方法可以确定图像数据的长度。为了确保这一点,这意味着 0xFFD9 不得出现在实际图像数据本身中。 JPEG 算法中是否内置了一些东西来确保或者我在这里遗漏了什么?
1 如果图像中包含缩略图,则可能会出现第二个 0xFFD8 和 0xFFD9,但这取决于包含段的长度 - 通常是来自我的 0xFFE1 (APP1) 段看到。在我目前检查过的图像中,缩略图数据的开始和大小仍然在 IFD1 中的 0x0201(JPEGInterchangeFormat - JPEG SOI 偏移)和 0x202(JPEGInterchangeFormatLength - JPEG 数据字节)字段中给出,即使这些已被弃用在技术说明 #2 中。
【问题讨论】: