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)