歷史
該標準於1991年3月1日在C-Cube Microsystems的一個涉及許多公司代表的會議上創建,這些公司包括:C-Cube Microsystems、Radius、
NeXT、Storm Tech、PD JPEG小組、Sun和Handmade軟體。該標準似乎已失去了所有人,因為C-Cube Microsystems已停產,該標準的進一步發展已停滯。最新版本為v1.02,發布於1992年9月1日。
JFIF已標準化為ISO/IEC 10918-5:2013,ITU-TT.871和Ecma InternationalTR/98。
1996年,RFC2046指定了在網際網路上傳輸JPEG圖像的圖形格式應使用JFIF。網際網路媒體型“image/jpeg”必須編碼為JFIF。但在具體實踐中,幾乎所有網際網路軟體都可以解碼任何使用Y或YCbCr組件的JIF圖像,無論其是否兼容JFIF。
目的
JFIF定義了JPEG Part1標準(ISO/IECIS 10918-1,ITU-T建議書T.81)中未指定的許多細節:
組件樣本註冊
JPEG允許多個組件(例如YCbCr)有不同的解析度,但它沒有定義不同的樣本數組應該如何對齊。JFIF標準要求樣本定位“色度抽樣”,這使解碼器可以將每個組件數組視為等大小矩形的像素中心點的採樣表示,並且每個陣列與圖像有相同的外部邊界。這對於計算機很方便,但對齊沒有在MPEG-2及許多視頻應用程式中使用。
解析度和寬高比
JPEG標準不包括對圖像解析度或寬高比進行編碼的任何方法。JFIF提供了一個通過JPEG擴展-應用程式段提供解析度或寬高比信息的方式。它使用應用程式段#0(Application Segment #0),段頭“JFIF\x00”,並規定這必須是檔案中的第一個段,從而使識別JFIF檔案更簡單。數位相機記錄的EXIF通常不包含該段,但在其他方面通常匹配JFIF標準。
色彩空間
JPEG沒有定義圖像使用哪個色彩空間。JFIF定義了使用的色彩模式:無論Y=灰度,或者CCIR 601定義的YCbCr。因為這不是一個絕對色彩空間——除非已提供並解釋一個ICC配置檔案、色彩空間元數據或sRGB標籤,解碼的JFIF圖像將依賴於設備的RGB色彩空間。因此,JFIF本身不提供在網際網路上精確傳輸經色彩管理的圖像的機制。
檔案格式結構
JFIF檔案由一系列標記(marker)或標記段(marker segments)組成。標記在JPEG標準的第一部分中定義。每個標記由兩個位元組組成:一個FF位元組後跟一個不等於00或FF的位元組,並指定標記的類型。一些標記是獨立的,但大多數“標記段開始”的標示包含按以下模式的數據位元組:
FFxxs1s2數據位元組
位元組s1和s2一同表示一個大端16位整數,指定之後“數據位元組”的長度加上用於表示長度的2個位元組。換句話說,s1和s2指定了之後的數據位元組數量為:256 *s1+s2- 2。
根據JPEG標準第一部分,應用程式可以使用APP標記和定義應用程式指定的特定含義數據。JFIF標準中定義了下列APP標記段:
JFIF APP0標記段(JFIF短標記)(強制性)
JFIF擴展APP0標記段(JFXX短標記)(可選)
它們的描述如下:
JFIF標準需要JFIF APP0標記段必須緊隨SOI標記。如果一個JFIF擴展APP0標記段被使用,它必須緊隨JFIF APP0標記段。因此一個JFIF檔案將具有下列結構:
JFIF檔案結構 | | |
---|
SOI | FF D8 | 圖像開始(Start of Image) |
JFIF-APP0 | FF E0s1s24A 46 49 46 00 ... | 見下 |
JFXX-APP0 | FF E0s1s24A 46 58 58 00 ... | 可選,見下 |
… 額外標記段 (例如SOF、DHT、COM)
|
SOS | FF DA | 掃描開始(Start of Scan) |
壓縮的圖像數據 | | |
EOI | FF D9 | 圖像結束(End of Image) |
JFIF APP0標記段
在強制性JFIF APP0標記段中指定圖像的參數。可選嵌入未壓縮的縮略圖。
JFIF APP0標記段
欄位 大小 (位元組) 描述
APP0標記 2FF E0
長度 2 APP0段外的段長度
標識符 5 4A 46 49 46 00= “JFIF”的ASCII代碼,以空位元組終止
JFIF版本 2第一個位元組為主版本,第二個位元組為次要版本(01 02表示1.02)
密度單位 1下列像素密度欄位的單位
00:無單位; width:height像素寬高比 = Xdensity:Ydensity
01:每英寸像素(2.54厘米)
02:每厘米像素
Xdensity 2水平像素密度。不得為零。
Ydensity 2垂直像素密度。不得為零。
Xthumbnail 1 嵌入的RGB縮略圖的水平像素數。可以為零。
Ythumbnail 1 嵌入的RGB縮略圖的垂直像素數。可以為零。
縮略圖數據 3 ×n 未壓縮的24位RGB(每個顏色通道8位)光柵縮略圖數據,順序為R0、G0、B0、...Rn、Gn、Bn;其中“n” = Xthumbnail × Ythumbnail。
JFIF擴展APP0標記段
緊隨JFIF APP0標記段的可能是JFIF擴展APP0標記段。此段可能僅存在於JFIF 1.02及更高版本。它允許以3種不同的格式嵌入縮略圖。
JFIF擴展APP0標記段
欄位 大小(位元組) 描述
APP0標記 2 FF E0
長度 2 不包括APP0標記的段長度
標識符 5 4A 46 58 58 00= “JFIF”的ASCII代碼,以空位元組終止
縮略圖格式 1指定用於以下嵌入縮略圖的數據格式:
10:JPEG格式
11:每個像素1位元組調色格式
13:每個像素3位元組RGB格式
縮略圖數據 可變 取決於縮略圖格式。見下
縮略圖數據取決於縮略圖格式,如下所示:
使用JPEG編碼存儲的縮略圖
欄位 大小(位元組) 描述
SOI 2 FF D8
可變 必須為使用YCbCr或僅Y的JIF格式,並且必須不包含JFIF或JFXX段。
EOI 2 FF D9
每個像素使用一個位元組存儲的縮略圖
欄位 大小(位元組) 描述
Xthumbnail 1以下嵌入縮略圖的水平像素數。不得為零。
Ythumbnail 1以下嵌入縮略圖的垂直像素數。不得為零。
縮略圖調色板 768 256個調色板條目,每個條目包含24位RGB顏色值。
縮略圖數據 n每個像素一個位元組,包含調色板中顏色的索引,
其中n= Xthumbnail × Ythumbnail。
每個像素使用三個位元組存儲的縮略圖
欄位大小(位元組)描述
Xthumbnail 1 以下嵌入縮略圖的水平像素數。不得為零。
Ythumbnail 1 以下嵌入縮略圖的垂直像素數。不得為零。
縮略圖數據 3 ×n 未壓縮的24位RGB(每個顏色通道8位)光柵縮略圖數據,順序為R0、G0、B0、...Rn、Gn、Bn;其中“n” = Xthumbnail × Ythumbnail。
兼容性
較新的EXIF與JFIF兼容,但這兩個標準互不兼容。這是因為這兩個標準都規定了它們特定的應用程式段(JFIF為APP0,Exif為APP1)必須緊隨SOI標記。在實踐中,許多程式和數位相機生成包括兩個應用程式段的檔案。這不會影響大多數解碼器的圖像解碼,但設計不良的JFIF或Exif解析器可能無法正確識別檔案。
JFIF與AdobeAdobe
Photoshop的JPEG“信息資源塊”擴展和IPTC信息交換模型元數據兼容,因為JFIF不排除其他應用程式段,並且Photoshop擴展不要求它在檔案中的第一個段。但是,Photoshop一般將CMYK緩衝區保存為四組元“Adobe JPEGs”,這不匹配JFIF。由於這些檔案不是YCbCr色彩空間,它們不能被很多網頁瀏覽器或其他網際網路軟體解碼。