我很难理解JPEG文件格式的ITU-T T.81规范。希望其他人尝试解析JPEG文件和/或了解此文件格式的详细信息。
该规范指出ECS0段在SOS段之后开始,但是我无法在规范中找到它实际上谈论ECS0段的格式或如何检测其开始。在线简单的JPEG实现是有限的帮助,因为他们假设他们解析的JPEG很多东西。
有人能指出我正确的方向吗?
仅供参考:JPEG文件格式规范为here。
答案 0 :(得分:5)
当标准谈到ECS时,它并没有将它称为像SOS这样的段类型,带有标题和大小组件;它实际上是表示构成图像数据的MCU的原始霍夫曼压缩比特流。它被填充以填充整数个字节,并且可以选择与RST头交错(正式地,RST头与ECS分开)。
当标准说ECS 0 时,它表示第0次(第一次)ECS运行,而不是特定的ECS类型,如SOF0 / SOF1 / SOF2 /等是不同的类型。
基线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
一个方便的免费程序,用于帮助解释JFIF的结构是JPEGsnoop(http://www.impulseadventure.com/photo/jpeg-snoop.html)。菜单中有一个“Full Decode”选项,显示原始Huffman比特流,它如何映射到Huffman符号,进行去量化,然后映射到DCT组件。