複製鏈接
請複製以下鏈接發送給好友

jfif

鎖定
JPEG文件交換格式(JPEG File Interchange Format,簡稱JFIF),圖片存儲格式之一,由JPEG格式衍生而來,後綴為".jfif"。
中文名
JPEG文件交換格式 [2] 
外文名
JPEG File Interchange Format [2] 
別    名
jfif
含    義
圖片存儲格式之一
用    途
用來儲存和傳輸圖片的格式
文件組成部分
圖像開始SOI標記等

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)的圖形,因為它的壓縮方法用在這些圖形的型態上,會得到不適當的結果(PNGGIF格式通常是用來針對這種目的之圖形;GIF每一像素只有8位元,並不很適合於用在彩色照片,PNG可以被用來無失真地儲存照片,但是檔案太大讓它不適合在網頁上放照片)。
對於JFIF的MIME媒體型態是image/JPEG(定義在RFC 1341)。

jfif格式簡介

微處理機中的數據存放順序有大端(big endian)小端(little endian) [1]  之分。大端順序是指高字節數據存放在低地址處,低字節數據存放在高地址處,而小端順序是指高字節數據存放在內存高地址處,低字節數據存放在內存低地址處。例如,十六進制數為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文件結構

JFIF文件格式直接使用JPEG標準為應用程序定義的許多標記,因此JFIF格式成了事實上JPEG文件交換格式標準。JPEG的每個標記都是由2個字節組成,其前一個字節是固定值0xFF。每個標記之前還可以添加數目不限的0xFF填充字節(fill byte)。下面是其中的8個標記:
SOI 0xD8  圖像開始
 APP0 0xE0  JFIF應用
數據塊
 APPn 0xE1 - 0xEF  其他的應用數據塊(n, 1~15)
 DQT 0xDB  量化表
 SOF0 0xC0  幀開始
 DHT 0xC4  霍夫曼(Huffman)表
 SOS 0xDA  
掃描線開始
 EOI 0xD9  圖像結束

jfif組成部分

概述
一般的JFIF文件由下面的9個部分組成:
圖像開始SOI(Start of Image)標記
0h 2字節 0xFFD8
APP0標記(Marker)
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三個值可選,其分別代表的意義如上]
⑤ X方向像素密度(X density)
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標記(Markers)
① 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
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字節 0xFFC0
① 幀開始長度(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#)
JFIF格式使用的是YCbCr所以有3個分量(這裏特別要注意的是顏色分量的ID號是有含義的,1代表Y,2代表Cb,3代表Cr,4代表I,5代表Q):
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
DHT (Difine Huffman Table)
0h 2字節 0xFFC4
① 霍夫曼表的長度(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
DRI (Define Restart Interval)
(在沒有DRI標記,或間隔為零時,就不存在重新開始間隔和重開始標記)
0h 2字節 0xFFDD
① 長度 2h 2字節 0x0004(①~②兩個字段的總長度)
② MCU 塊的單元中的重新開始間隔
4h 2字節內容不定(設為n,則意思是説,每n個MCU塊就有一個RSTn標記。第一個標記是RST0,然後是RST1等,RST7後再從RST0重複)
掃描開始SOS
SOS(Start of Scan)
0h 2字節 0xFFDA
① 掃描開始長度(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
EOI (End of Image)
0h 2字節 0xFFD9
參考資料