一、文件結構
FIF文件格式直接使用JPEG標準爲應用程序定義的許多標記,因此JFIF格式成了事實上JPEG文件交換格式標準。JPEG的每個標記都是由2個字節組成,其前一個字節是固定值0xFF。每個標記之前還可以添加數目不限的0xFF填充字節(fill byte)。下面是其中的8個標記:
1. SOI 0xD 圖像開始
2. APP0 0xE0 JFIF應用數據塊
3. APPn 0xE1 - 0xEF 其他的應用數據塊(n, 1~15)
4. DQT 0xDB 量化表
5. SOF0 0xC0 幀開始
6. DHT 0xC4 霍夫曼(Huffman)表
7. SOS 0xDA 掃描線開始
8. EOI 0xD9 圖像結束
二、JPEG文件由下面的8個部分組成:
(1) 圖像開始SOI(Start of Image)標記
(2) APP0標記(Marker)
① APP0長度(length)
② 標識符(identifier)
③ 版本號(version)
④ X和Y的密度單位(units=0:無單位;units=1:點數/英寸;units=2:點數/釐米)
⑤ X方向像素密度(X density)
⑥ Y方向像素密度(Y density)
⑦ 縮略圖水平像素數目(thumbnail horizontal pixels)
⑧ 縮略圖垂直像素數目(thumbnail vertical pixels)
⑨ 縮略圖RGB位圖(thumbnail RGB bitmap)
(3) APPn標記(Markers),其中n=1~15(任選)
① APPn長度(length)
② 由於詳細信息(application specific information)
(4) 一個或者多個量化表DQT(difine quantization table)
① 量化表長度(quantization table length)
② 量化表數目(quantization table number)
③ 量化表(quantization table)
(5) 幀圖像開始SOF0(Start of Frame)
① 幀開始長度(start of frame length)
② 精度(precision),每個顏色分量每個像素的位數(bits per pixel per color component)
③ 圖像高度(image height)
④ 圖像寬度(image width)
⑤ 顏色分量數(number of color components)
⑥ 對每個顏色分量(for each component)
o ID
o 垂直方向的樣本因子(vertical sample factor)
o 水平方向的樣本因子(horizontal sample factor)
o 量化表號(quantization table#)
(6) 一個或者多個霍夫曼表DHT(Difine Huffman Table)
① 霍夫曼表的長度(Huffman table length)
② 類型、AC或者DC(Type, AC or DC)
③ 索引(Index)
④ 位表(bits table)
⑤ 值表(value table)
(7) 掃描開始SOS(Start of Scan)
① 掃描開始長度(start of scan length)
② 顏色分量數(number of color components)
③ 每個顏色分量
o ID
o 交流係數表號(AC table #)
o 直流係數表號(DC table #)
④ 壓縮圖像數據(compressed image data)
(8) 圖像結束EOI(End of Image)
表6-06表示了APP0域的詳細結構。有興趣的讀者可通過UltraEdit或者PC TOOLS等工具軟件打開一個JPG圖像文件,對APP0的結構進行分析和驗證。
表6-06 JFIF格式中APP0域的詳細結構
偏移 |
長度 |
內容 |
塊的名稱 |
說明 |
0 |
2 byte |
0xFFD8 |
(Start of Image,SOI) |
圖像開始 |
2 |
2 byte |
0xFFE0 |
APP0(JFIF application segment) |
JFIF應用數據塊 |
4 |
2 bytes |
|
length of APP0 block |
APP0塊的長度 |
6 |
5 bytes |
|
"JFIF"+"0" |
識別APP0標記 |
11 |
1 byte |
|
<Major version> |
主要版本號(如版本1.02中的1) |
12 |
1 byte |
|
<Minor version> |
次要版本號(如版本1.02中的02) |
13 |
1 byte |
|
<Units for the X |
X和Y的密度單位 units=0:無單位 units=1:點數/英寸 units=2:點數/釐米 |
14 |
2 bytes |
|
<Xdensity> |
水平方向像素密度 |
16 |
2 bytes |
|
<Ydensity> |
垂直方向像素密度 |
18 |
1 byte |
|
<Xthumbnail> |
縮略圖水平像素數目 |
19 |
1 byte |
|
<Ythumbnail> |
縮略圖垂直像素數目 |
|
3n |
|
< Thumbnail RGB bitmap> |
縮略RGB位圖(n爲縮略圖的像素數) |
|
|
|
Optional JFIF extension APP0 marker segment(s) |
任選的JFIF擴展APP0標記段 |
|
…… |
|
…… |
|
|
2 byte |
0xFFD9 |
(EOI) end-of-file |
圖像文件結束標記 |
2)Exif解析:Exif文件格式描述