jfif
圖片存儲格式之一
圖片存儲格式之一,由JPEG格式衍生而來,後綴為".jfif"。
JPEG本身只有描述如何將一個圖像轉換為位元組的數據串流(streaming),但並沒有說明這些位元組如何在任何特定的儲存媒體上被封存起來。一個由獨立JPEG小組(Independent JPEG Group)所建立的額外標準,稱為JFIF(JPEG File Interchange Format,JPEG檔案交換格式),詳細說明如何從一個JPEG串流,產出一個適合於電腦儲存和傳輸(像是在網際網路上)的檔案。當有人稱呼一個"JPEG檔案",一般而言他是意指一個JFIF檔案,或有時候是一個Exif JPEG檔案。然而,也有其他以JPEG為基礎的檔案格式,像是JNG。
JPEG/JFIF是最普遍在萬維網(World Wide Web)上被用來儲存和傳輸圖片的格式。它並不適合於線條繪圖(drawing)和其他文字或圖示(iconic)的圖形,因為它的壓縮方法用在這些圖形的型態上,會得到不適當的結果(PNG和GIF格式通常是用來針對這種目的之圖形;GIF每一像素只有8位元,並不很適合於用在彩色照片,PNG可以被用來無失真地儲存照片,但是檔案太大讓它不適合在網頁上放照片)。
對於JFIF的MIME媒體型態是image/jpeg(定義在RFC 1341)。
微處理機中的數據存放順序有大端(big endian)小端(little endian)之分。大端順序是指高位元組數據存放在低地址處,低位元組數據存放在高地址處,而小端順序是指高位元組數據存放在內存高地址處,低位元組數據存放在內存低地址處。例如,十六進位數為A02B,按大端順序存放就是A02B,按小端順序存放就是2BA0。摩托羅拉(Motorola)公司的微處理器使用大端順序存放,而英特爾(Intel)公司的微處理器使用小端順序。JPEG文件中的位元組是按照大端順序排列的。
JPEG委員會在制定JPEG標準時,定義了許多標記(marker)用來區分和識別圖像數據及其相關信息,但筆者沒有找到JPEG委員會對JPEG文件交換格式的明確定義。直到1998年12月從分析網上具體的JPG圖像來看,使用比較廣泛的還是JPEG文件交換格式(JPEG File Interchange Format,JFIF)版本號為1.02。這是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外還有TIFF JPEG等格式,但由於這種格式比較複雜,因此大多數應用程序都支持JFIF文件交換格式。
JPEG文件使用的顏色空間是YCbCr空間。在JFIF文件格式中,圖像樣本的存放順序是從左到右和從上到下。這就是說JFIF文件中的第一個圖像樣本是圖像左上角的樣本。
JFIF文件格式直接使用JPEG標準為應用程序定義的許多標記,因此JFIF格式成了事實上JPEG文件交換格式標準。JPEG的每個標記都是由2個位元組組成,其前一個位元組是固定值0xFF。每個標記之前還可以添加數目不限的0xFF填充位元組(fill byte)。下面是其中的8個標記:
簡介
一般的JFIF文件由下面的9個部分組成:
0h 2位元組 0xFFD8
0h 2位元組 0xFFE0
① APP0長度(length)(①~⑨九個欄位的總長度)
2h 2位元組內容不定(①~⑨九個欄位的總長度)
② 標識符(identifier)
4h 5位元組 0x4A46494600 即“JFIF0”
③ 版本號(version)
9h 2位元組 0x0102 JFIF的版本號目前基本上都是1.2
④ X和Y的密度單位(units=0:無單位;units=1:點數/英寸;units=2:點數/厘米)
bh 1位元組只有0,1,2三個值可選,其分別代表的意義如上]
ch 2位元組取值範圍未知
⑥ Y方向像素密度(Y density)
eh 2位元組取值範圍未知
⑦ 縮略圖水平像素數目(thumbnail horizontal pixels)
10h 1位元組取值範圍未知
⑧ 縮略圖垂直像素數目(thumbnail vertical pixels)
11h 1位元組取值範圍未知
⑨ 縮略圖RGB點陣圖(thumbnail RGB bitmap)
12h 長度可能是3的倍數內容不定
本段(APP0)可以包含圖像的一個微縮版本,存為24位的RGB像素。如果沒有微縮圖像(這種情況更常見),則⑦“縮略圖水平像素數目”和⑧“縮略圖垂直像素數目”的值均為0。
① APPn長度(length)(①②兩個欄位的總長度)
② 詳細信息(application specific information)
對每個APP:
若為APPN(N=1~F(以16進位表示,N任選其中一個))
· 標記: mh 2位元組 0xFFEN
· 長度:(m+2)h 2位元組內容不定(設為n(10進位))(本欄位與下一欄位的總長度)
· 詳細信息: (m+4)h n-2位元組(即長度減2)內容不定
DQT(Difine Quantization Table)
0h 2位元組 0xFFDB
① 量化表長度(quantization table length)(①~②兩個欄位的總長度)
2h 2位元組內容不定(①~②兩個欄位的總長度)
② 量化表(quantization table)
A. P/T(高四位:精度,低四位:表ID)
B. 表項
對每個量化表:
· P/T(高四位:精度,低四位:表ID) mh 1位元組精度, 0 表示 8 bit, 1表示 16 bit;ID取值範圍為0~3, 否則錯誤
· 表項 (m+1)h (64×(精度+1))位元組內容長,故略
(5) 幀圖像開始SOF0(Start of Frame)
0h 2位元組 0xFF C0
① 幀開始長度(start of frame length) (①~⑥六個欄位的總長度)
2h 2位元組內容不定(①~⑥六個欄位的總長度)
② 精度(precision),每個顏色分量每個像素的位數(bits per pixel per color component)
4h 1位元組每個樣本位數, 通常是 8 (大多數軟體不支持 12 和 16)
③ 圖像高度(image height) 5h 2位元組內容不定(如果不支持 DNL 就必須 >0)
④ 圖像寬度(image width) 7h 2位元組內容不定(如果不支持 DNL 就必須 >0)
⑤ 顏色分量數(number of color components)
9h 1位元組內容不定(灰度圖是 1, YCbCr/YIQ 彩色圖是 3, CMYK 彩色圖是 4,我們這裡討論的JFIF使用的是YCbCr,故這裡顏色分量數為3)
⑥ 對每個顏色分量(for each component)
A. ID
B. 垂直方向的樣本因子(vertical sample factor)
C. 水平方向的樣本因子(horizontal sample factor) B、C共佔用1位元組,B佔用低4位,C佔用高4位)
D. 量化表號(quantization table#)
1) ID
ah 1位元組 0x01
(高四位)水平(低四位)垂直樣本因子
bh 共1位元組 0x227
量化表號
ch 1位元組內容不定(本分量使用的量化表的ID號)
2) ID
dh 1位元組 0x02
(高四位)水平(低四位)垂直樣本因子
eh 共1位元組 0x11J
量化表號
fh 1位元組內容不定(本分量使用的量化表的ID號)
3) ID
10h 1位元組 0x03
(高四位)水平(低四位)垂直樣本因子
11h 共1位元組 0x11
量化表號
12h 1位元組內容不定(本分量使用的量化表的ID號)
DHT (Difine Huffman Table)
0h 2位元組 0xFF C4
① 霍夫曼表的長度(Huffman table length) (①~②兩個欄位的總長度)
2h 2位元組內容不定(①~②兩個欄位的總長度)
② 對每個霍夫曼表(一般情況下,霍夫曼表不止一個,但是絕對不多於4個)
A. 表號
B. 類型:AC或者DC(其中0:DC表,1:AC表);A、B共佔用1位元組,A佔用低4位,B佔用高4位)
C. 長16個位元組的編碼,其代碼代數和為接下來的編碼的長度
D. 內容編碼
對每個霍夫曼表:
·(高四位)類型和(低四位)表號: mh 共1位元組內容不定(有四個可能:0x00表示第0個DC表,0x01表示第1個DC表,0x10表示第0個AC表,0x11表示第1個AC表)
· 長16個位元組的編碼: (m+1)h 16位元組內容不定(設這16個位元組上數據之和為n)
· 內容編碼: (m+17)h n位元組內容長,故略)
DRI (Define Restart Interval)
(在沒有DRI標記,或間隔為零時,就不存在重新開始間隔和重開始標記)
0h 2位元組 0xFF DD
① 長度 2h 2位元組 0x0004(①~②兩個欄位的總長度)
② MCU 塊的單元中的重新開始間隔
4h 2位元組內容不定(設為n,則意思是說,每n個MCU塊就有一個RSTn標記。第一個標記是RST0,然後是RST1等,RST7后再從RST0重複)
SOS(Start of Scan)
0h 2位元組 0xFF DA
① 掃描開始長度(start of scan length)
2h 2位元組內容不定(①~③再加上④的A\B\C的總長度)
② 顏色分量數(number of color components)
4h 1位元組應該和⑸⑤的值相同(灰度圖是1, YCbCr/YIQ 彩色圖是3, CMYK 彩色圖是4)
③ 每個顏色分量
A. ID
B. 交流係數表號(AC table #)
C. 直流係數表號(DC table #)
(B、C共佔用1位元組,B:佔用低4位,C:佔用高4位)
由②得到這裡的顏色分量數為3(這裡的顏色分量的ID號的含義和⑸⑥的一樣,1代表Y,2代表Cb,3代表Cr,4代表I,5代表Q):
1) ID
5h 1位元組 0x01 (高四位)直流(低四位)交流數表號
6h 共1位元組 0x00
2) ID
7h 1位元組 0x027 (高四位)直流(低四位)交流數表號
8h 共1位元組 0x11
3) ID
9h 1位元組 0x03 (高四位)直流(低四位)交流數表號
ah 共1位元組 0x11
④ 壓縮圖像數據(compressed image data)
A. 譜選擇開始 bh 1位元組 0x00
B. 譜選擇結束 ch 1位元組 0x3F
C. 兩個4位欄位,高位和低位的譜選擇 dh 1位元組在基本JPEG中總為0x00
D. 數據 eh 長度不定內容長,故略
EOI (End of Image)
0h 2位元組 0xFF D9