JPEG文件頭分析

說明

1 jpeg是一種壓縮標準,大幅度縮小數據流,jpeg以FF D8開頭,FF D9結束。
2 jpeg圖像由多個maker組成,多個maker+compressed組成了jpeg。
3 jiff是一種在萬維網上進行jpeg傳輸的格式,可以理解是對jpeg圖片的封裝,符合jpeg標準,jiff的maker是app0,記錄了圖像的基本信息,也可能有縮略圖。jiff格式比較老,老式的數碼相機使用此格式。
4 exif新比較新的jpeg封裝格式,exif的maker是app1,記錄了更多的東西,如ISP信息、GPS信息、相機信息,圖像旋轉等等
5 jiff和exif可以共存,很多jpeg圖像都有app0的jiff段和app1的exif段

jpeg文件結構

SOI  0xD8            圖像開始
APP0 0xE0            JFIF應用數據塊
APPn 0xE1 - 0xEF 其他的應用數據塊(n, 1~15)
DQT  0xDB           量化表
SOF0 0xC0            幀開始
DHT  0xC4           霍夫曼(Huffman)表
SOS  0xDA           掃描線開始
EOI  0xD9            圖像結束

jiff和exif的基本樣式

在這裏插入圖片描述

jiff app0標記段

在這裏插入圖片描述

exif app1標記段

在這裏插入圖片描述

SOF標記段

此標記段解析圖像寬高
在這裏插入圖片描述

解析jpeg

1 libjpeg開源庫只能解析jiff格式的jpeg,不過jiff格式比較簡單,我們也可以根據格式自己解析。
2 jhead可以解析exif格式的jpeg,exif標記段比較複雜,信息較多,參考了此開源庫做了解析。

重要段

1 app0和app1 判斷是哪種封裝的jpeg(jiff/exif)
2 解析方向,根據app1中的信息解析,jiff不支持方向
3 解析progressive掃描,通過SOFn判斷是baseline還是progressive掃描

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章