6

...或者我应该更深入地寻找数据流0xFF 0xD8吗?

这个 Q中,我了解到 APPn 不必立即跟随 SOI。是否存在符合规范的 JPEG 案例,其中 SOI 位置!= 流的开头?


规范中的引用(附件 B,第 1.1.2 节):

标记用于识别压缩数据格式的各种结构部分。大多数标记开始包含一组相关参数的标记段;一些标记是独立的。所有标记都分配有两个字节的代码:一个 X'FF' 字节后跟一个不等于 0 或 X'FF' 的字节(见表 B.1)。任何标记之前都可以有任意数量的填充字节,这些填充字节是分配代码 X'FF' 的字节。

4

1 回答 1

4

libjpeg在 SOI 之前不允许垃圾:

/* Like next_marker, but used to obtain the initial SOI marker. */
/* For this marker, we do not allow preceding garbage or fill; otherwise,
* we might well scan an entire input file before realizing it ain't JPEG.
* If an application wants to process non-JFIF files, it must seek to the
* SOI before calling the JPEG library.
*/

来自:随机 libjpeg 镜像

例如,go实现也不允许前面的垃圾。

但是,如果有疑问,请遵守 Postel 定律:

接受的内容要自由,发送的内容要保守

虽然,您不想过于自由,或者您最终可能不是从流中提取实际的 JPEG,而是嵌入的 EXIF 缩略图或类似的东西。

于 2013-09-03T01:17:21.730 回答