...还是应该深入研究寻找0xFF 0xD8
序列的数据流?
从this Q开始,我已经了解了APPn没有立即关注SOI的内容。是否存在符合规范的JPEG情况,其中SOI位置!=流的开头?
规范引用(附件B,第1.1.2段):
标记用于识别各种结构部分 压缩数据格式。大多数标记开始包含标记段 一组相关的参数;一些标记独立。所有标记 被分配了两个字节的代码:一个X'FF'字节后跟一个字节 不等于0或X'FF'(见表B.1)。任何标记可以任选地 前面有任意数量的填充字节,它们是分配代码的字节 X'FF”。
答案 0 :(得分: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.
*/
E.g。 go
implementation也不允许先前的垃圾。
但是,如果有疑问,请遵守Postel定律:
在接受的内容中保持自由,在发送内容时要保守
虽然,你不想过于自由,或者你最终可能不会从流中提取实际的JPEG,而是提取嵌入的EXIF缩略图或类似内容。