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）中未指定的許多細節：

### 組件樣本註冊

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`的字節，並指定標記的類型。一些標記是獨立的，但大多數「標記段開始」的標示包含按以下模式的數據字節：

`FF ''xx'' ''s1'' ''s2'' ''数据字节''`

字節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 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資訊交換模型元數據兼容，因為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日。

JFIF已標準化為ISO/IEC 10918-5:2013，ITU-T T.871和Ecma International TR/98。

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.

### 標準

- Hamilton, Eric: JPEG File Interchange Format, Version 1.02. (PDF, 0,02 MB) 1992-09-01.
- ITU-T Recommendation T.871: TERMINALS FOR TELEMATIC SERVICES. Still-image compression – JPEG-1 extensions. Information technology – Digital compression and coding of continuous-tone still images: JPEG File Interchange Format (JFIF). 2011-05-14. (PDF, 0,2 MB)
- ITU-T Recommendation T.81: CCITT: TERMINAL EQUIPMENT AND PROTOCOLS FOR TELEMATIC SERVICES. INFORMATION TECHNOLOGY – DIGITAL COMPRESSION AND CODING OF CONTINUOUS-TONE STILL IMAGES – REQUIREMENTS AND GUIDELINES. 1992-09-18. (PDF, 1,1 MB)