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

时间:2013-09-03 00:31:24

标签: image jpeg

...还是应该深入研究寻找0xFF 0xD8序列的数据流?

this Q开始,我已经了解了APPn没有立即关注SOI的内容。是否存在符合规范的JPEG情况,其中SOI位置!=流的开头?


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

  

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

1 个答案:

答案 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.
*/

来自:Random libjpeg mirror

E.g。 go implementation也不允许先前的垃圾。

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

  

在接受的内容中保持自由,在发送内容时要保守

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