JPEG檔案交換格式

具有多個版本的圖像文件格式

JPEG檔案交換格式(英語:JPEG File Interchange Format,簡稱JFIF)是一個圖檔格式標準。它是一種交換符合JPEG交換格式(JIF)標準的JPEG編碼檔案的格式。它解決了JIF在簡單JPEG編碼檔案交換方面的一些限制。與所有符合JIF的檔案一樣,JFIF檔案中的圖像數據使用JPEG標準的技術壓縮,因此JFIF有時被稱為「JPEG/JFIF」。

目的

JFIF定義了JPEG Part1標準(ISO/IEC IS 10918-1,ITU-T建議書T.81[1])中未指定的許多細節:

組件樣本註冊

JPEG允許多個組件(例如YCbCr)有不同的解像度,但它沒有定義不同的樣本陣列應該如何對齊。JFIF標準要求樣本定位「色度抽樣」,這使解碼器可以將每個組件陣列視為等大小矩形的像素中心點的採樣表示,並且每個陣列與圖像有相同的外部邊界。這對於電腦很方便,但對齊沒有在MPEG-2及許多影片應用程式中使用。

解像度和寬高比

JPEG標準不包括對圖像解像度或寬高比進行編碼的任何方法。JFIF提供了一個通過JPEG擴充-應用程式段提供解像度或寬高比資訊的方式。它使用應用程式段#0(Application Segment #0),段頭「JFIF\x00」,並規定這必須是檔案中的第一個段,從而使辨識JFIF檔案更簡單。數碼相機記錄的EXIF通常不包含該段,但在其他方面通常符合JFIF標準。

色彩空間

JPEG沒有定義圖像使用哪個色彩空間。JFIF定義了使用的色彩模式英語Color model:無論Y=灰度,或者CCIR 601定義的YCbCr。因為這不是一個絕對色彩空間——除非已提供並解釋一個ICC設定檔、色彩空間元數據或sRGB標籤,解碼的JFIF圖像將依賴於裝置的RGB色彩空間。因此,JFIF本身不提供在互聯網上精確傳輸經色彩管理的圖像的機制。

檔案格式結構

JFIF檔案由一系列標記(marker)或標記段(marker segments)組成。標記在JPEG標準的第一部分中定義。[1]每個標記由兩個位元組組成:一個FF位元組後跟一個不等於00FF的位元組,並指定標記的類型。一些標記是獨立的,但大多數「標記段開始」的標示包含按以下模式的數據位元組:

FF xx s1 s2 数据字节

位元組s1s2一同表示一個大端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標記段。[2]因此一個JFIF檔案將具有下列結構:

JFIF檔案結構
代碼 描述
SOI FF D8 圖像開始(Start of Image)
JFIF-APP0 FF E0 s1 s2 4A 46 49 46 00 ... 見下
JFXX-APP0 FF E0 s1 s2 4A 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標記 2 FF 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 = 「JFXX」的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。

相容性

較新的Exchangeable image file format (EXIF)與JFIF相似,但這兩個標準不相容。這是因為兩個標準都規定它們的特定應用程式段(JFIF的APP0,Exif的APP1)必須緊隨SOI標記。實際上,許多程式和數碼相機生成的檔案都包含這兩個應用程式段。這不會影響大多數解碼器的圖像解碼,但是設計不良的JFIF或Exif解析器可能無法正確識別檔案。

JFIF與Adobe Adobe Photoshop的JPEG「資訊資源塊」擴充和IPTC資訊交換模型英語IPTC Information Interchange Model元數據相容,因為JFIF不排除其他應用程式段,並且Photoshop擴充不要求它在檔案中的第一個段。但是,Photoshop一般將CMYK緩衝區儲存為四組元「Adobe JPEGs」,這不符合JFIF。由於這些檔案不是YCbCr色彩空間,它們不能被很多網頁瀏覽器或其他互聯網軟件解碼。

歷史

該標準於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日。[2]

JFIF已標準化為ISO/IEC 10918-5:2013,[3]ITU-T T.871[4]Ecma International TR/98。[5]

1996年,RFC 2046指定了在互聯網上載輸JPEG圖像的圖形格式應使用JFIF。互聯網媒體類型「image/jpeg」必須編碼為JFIF。但在具體實踐中,幾乎所有互聯網軟件都可以解碼任何使用Y或YCbCr組件的JIF圖像,無論其是否相容JFIF。

參考資料

拓展閱讀

書籍

  • Miano, John M., "Compressed Image File Formats." 1999, Addison-Wesley. ISBN 978-0-201-60443-6.
  • Pennebaker, William B. and Joan L. Mitchell: JPEG still image data compression standard. 3rd edition, 1993. Springer. ISBN 978-0-442-01272-4.

標準