與具體的編碼數據空間相比,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表的重建有些複雜,涉及底層更多關於數據壓縮領域的知識,能夠參考「範式霍夫曼編碼」相關材料,本博文再也不作介紹該編碼原理。