解析JPEG文件格式:熵编码段(ECS)的格式?

me2*_*me2 7 format jpeg file

我很难理解JPEG文件格式的ITU-T T.81规范.希望其他人尝试解析JPEG文件和/或了解此文件格式的详细信息.

该规范指出ECS0段在SOS段之后开始,但我无法找到它在实际上谈论ECS0段的格式或如何检测其启动的规范中的位置.在线简单的JPEG实现是有限的帮助,因为他们假设他们解析的JPEG很多东西.

谁能指出我正确的方向?

仅供参考:JPEG文件格式规范在这里.

mat*_*tja 5

当标准谈到ECS时,它并没有将它称为像SOS这样的段类型,带有头部和大小组件; 它实际上是表示构成图像数据的MCU的原始霍夫曼压缩比特流.它被填充以填充整数个字节,并且可以选择与RST头交错(正式地,RST头与ECS分开).

当标准表示ECS 0时,它表示第0次(第一次)ECS运行,而不是像SOF0/SOF1/SOF2 /等不同类型的特定ECS类型.

基线DCT的示例:

FF DA // SOS header
00 08 // 8 bytes
01 // 1 channel
01 00 // channel 1 QT 0 HT 0
00 3F 00 // start/end spectral selector, successive approximation bit high/low
12 34 56 78 ... // Huffman-compressed MCU raw data
 (sequence of Fuffman codes looked-up in AC/DC Huffman tables)

FF D9 // EOI
Run Code Online (Sandbox Code Playgroud)

一个方便的免费程序,帮助解释JFIF的结构是JPEGsnoop(http://www.impulseadventure.com/photo/jpeg-snoop.html).菜单中有一个"Full Decode"选项,显示原始Huffman比特流,它如何映射到Huffman符号,进行去量化,然后映射到DCT组件.