JPEG - EOI 标记可以在 SOS 后出现在图像数据中吗?

JPEG - Can EOI Marker appear inside image data after SOS?

我知道 JPEG 文件以 0xFFD8 (SOI) 开头,然后是一些 0xFFEn 段保存元数据,然后是一些保存压缩相关数据的段( DQT、DHT等)最后一个是0xFFDA(SOS);然后是以 0xFFD9 (EOI) 结尾的实际图像数据。这些段中的每一个都在 JPEG 标记之后的两个字节中声明其长度,因此计算下一段 segment/start 的结尾是一个简单的操作,并且图像数据的开始可以从SOS 段。

到那时为止,0xFFD9 (EOI) 的出现是无关紧要的 1,因为段是由长度标识的。然而,据我所知,除了在 SOS 段之后找到 0xFFD9(EOI) 标记之外,没有其他方法可以确定图像数据的长度。为了确保这一点,这意味着 0xFFD9 不得出现在实际图像数据本身中。 JPEG 算法中是否内置了一些东西来确保这一点,或者我在这里遗漏了什么?


1 如果图像中包含缩略图,则会出现第二个 0xFFD8 和 0xFFD9,但这由包含片段的长度来处理 - 通常是 0xFFE1 (APP1 ) 段从我所看到的。在我目前检查过的图像中,缩略图数据的开始和大小仍然在 IFD1 的 0x0201(JPEGInterchangeFormat - JPEG SOI 的偏移量)和 0x202(JPEGInterchangeFormatLength - JPEG 数据的字节数)字段中给出,即使这些已被弃用在技​​术说明 #2 中。

在 JPEG 中,压缩值 FF 被编码为 FF00。

压缩值 FFD9 将被编码为 FF00D9。