Image JPEG-SOS后EOI标记能否出现在图像数据中?

Image JPEG-SOS后EOI标记能否出现在图像数据中?,image,jpeg,exif,Image,Jpeg,Exif,据我所知,JPEG文件以0xFFD8(SOI)开始,然后是一些保存元数据的0xFFEn段,然后是一些保存压缩相关数据(DQT、DHT等)的段,最后一个是0xFFDA(SOS);然后是以0xFFD9(EOI)结尾的实际图像数据。这些段中的每一段都以JPEG标记后面的两个字节表示其长度,因此计算一段的结束/下一段的开始非常简单,并且可以根据SOS段的长度计算图像数据的开始 到目前为止,0xFFD9(EOI)的外观与1无关,因为段由长度标识。然而,就我所见,除了在SOS段之后找到0xFFD9(EOI)

据我所知,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中被弃用。

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


压缩值FFD9将被编码为FF00D9。

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


压缩值FFD9将被编码为FF00D9。

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


压缩值FFD9将被编码为FF00D9。

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


压缩值FFD9将被编码为FF00D9。

答案未给出。它实际上取决于JPEG容器使用的实际压缩。原始的ITU T.81说,在编码过程中,我们将用0xFF 0x00字节序列转义0xFF字节,而在解码过程中,我们应该在0xFF 0x00字节序列中跳过0x00。而其他JPEG标准扩展并不完全遵循本指南。例如,ITU T.87 JPEG-LS编码样本在原始标准文档提供的sample.jls文件中显然有0xFF,但后面没有0x00(例如0xFF 0x7F)。这是标准的失败,还是标准的例子,还是仅仅是编写标准的人?答案是肯定的。它实际上取决于JPEG容器使用的实际压缩。原始的ITU T.81说,在编码过程中,我们将用0xFF 0x00字节序列转义0xFF字节,而在解码过程中,我们应该在0xFF 0x00字节序列中跳过0x00。而其他JPEG标准扩展并不完全遵循本指南。例如,ITU T.87 JPEG-LS编码样本在原始标准文档提供的sample.jls文件中显然有0xFF,但后面没有0x00(例如0xFF 0x7F)。这是标准的失败,还是标准的例子,还是仅仅是编写标准的人?答案是肯定的。它实际上取决于JPEG容器使用的实际压缩。原始的ITU T.81说,在编码过程中,我们将用0xFF 0x00字节序列转义0xFF字节,而在解码过程中,我们应该在0xFF 0x00字节序列中跳过0x00。而其他JPEG标准扩展并不完全遵循本指南。例如,ITU T.87 JPEG-LS编码样本在原始标准文档提供的sample.jls文件中显然有0xFF,但后面没有0x00(例如0xFF 0x7F)。这是标准的失败,还是标准的例子,还是仅仅是编写标准的人?答案是肯定的。它实际上取决于JPEG容器使用的实际压缩。原始的ITU T.81说,在编码过程中,我们将用0xFF 0x00字节序列转义0xFF字节,而在解码过程中,我们应该在0xFF 0x00字节序列中跳过0x00。而其他JPEG标准扩展并不完全遵循本指南。例如,ITU T.87 JPEG-LS编码样本在原始标准文档提供的sample.jls文件中显然有0xFF,但后面没有0x00(例如0xFF 0x7F)。这是标准的失败,还是标准的例子,还是仅仅是编写标准的人?