与具体的编码数据空间相比,jpeg文件头占据很是小乃至能够忽略不计的大小。html
仍然拿JPEG解码--(1)JPEG文件格式概览中的《animal park》这张图片来举例,从跳过SOS(FF DA)的TAG开始——0x153,工具
就真正进入了编码数据区域,以下图所示:post
其占据的比例为:0x153/0x9721 = 339/38689 = 0.876%,还不到1%,其余jpeg图片也是相似状况。编码
可是,就是这么小的数据区域,倒是相当重要的地方,某些关键的地方一个字节出错了的话,解码就会出错(例如huffman tableurl
中数据),或者重建出的yuv图像异常(例如quantization table中数据)!spa
本篇博客主要介绍jpeg头信息解析,其中除了huffman table重建较复杂外,其余TAG的解析都比较容易。3d
1. APP0——FF EOorm
先贴出这段区域:htm
从ASCII值能够看出,保存了JFIF——JPEG File Interchange Format(JPEG文件交换格式),后面的几个字节应该是version信blog
息吧,没深究。
2. DQT——FF DB
量化表有两个,上面贴图只高亮了其中一个表。
从offset=0x16开始的两个字节(0x00 43)为这段区域的size=67,后面的一个字节为表的ID——0x00=0(能够看到第二张表中对
应位置offset=0x5D处为0x1)。
跳过前面三字节从offset=0x19处开始的64字节,即为量化表中量化值。其中须要说明的是,量化值是固定为64字节的,由于按8X8
进行DCT变换的。
工具解析的结果以下:
须要补充两点:
A.亮度信号的Y份量使用DQT表一,UV份量使用表二。
B.亮度信号一般采用细量化(量化值较小),对应位置处,表一一般比表二值要小。此量化缘由是人眼对亮度信号比较敏感,采用颗粒度
较细来量化,细量化引入的一个问题会消耗更多的数据空间。
3. SOF——FF C0
在该JPEG解码系列中第一篇已经详细介绍过了,再也不赘述。工具解析以下:
4. DHT——FF C4
共有四张表,上面只贴出第一张表。
DHT表的重建有些复杂,涉及底层更多关于数据压缩领域的知识,能够参考“范式霍夫曼编码”相关材料,本博文再也不作介绍该编码原理。