我应该在数据流的最开始处期待JPEG SOI标记吗?

Fre*_*ing 6 jpeg image

...或者我应该更深入地查找数据流以寻找0xFF 0xD8序列?

这个问题来看,我已经了解了APPn没有立即关注SOI的内容.是否存在符合规范的JPEG情况,其中SOI位置!=流的开头?


引用规范(附件B,第1.1.2段):

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

nma*_*ier 5

libjpegSOI 之前不允许有垃圾:

/* 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.
*/
Run Code Online (Sandbox Code Playgroud)

来自:随机 libjpeg 镜像

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

然而,如果有疑问,请遵循波斯特尔定律:

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

不过,您不想太自由,否则您可能最终不会从流中提取实际的 JPEG,而是提取嵌入的 EXIF 缩略图或类似的内容。