JPEG File Interchange Format


The JPEG File Interchange Format is an image file format standard. It defines supplementary specifications for the container format that contains the image data encoded with the JPEG algorithm. The base specifications for a JPEG container format is defined in the Annex B of the JPEG standard, known as JPEG Interchange Format. JFIF builds over JIF to solve some of JIF's limitations, including unnecessary complexity, component sample registration, resolution, aspect ratio, and color space. Because JFIF is a supplementary standard, the resulting file format may be referred to as "JPEG/JFIF".
JFIF is [|mutually incompatible] with the newer Exchangeable image file format.

Purpose

JFIF defines a number of details that are left unspecified by the JPEG Part 1 standard

Component sample registration

JPEG allows multiple components to have different resolutions, but it does not define how those differing sample arrays should be aligned. The JFIF standard requires samples to be sited "interstitially" – meaning the decoder can treat each component array as representing an array of equal-sized rectangular pixels sampled in their centers, with each array having the same exterior boundaries as the image. This is convenient for computer users, but is not the alignment used in MPEG-2 and most video applications.

Resolution and aspect ratio

The JPEG standard does not include any method of coding the resolution or aspect ratio of an image. JFIF provides resolution or aspect ratio information using an application segment extension to JPEG. It uses Application Segment #0, with a segment header consisting of the null-terminated string spelling "JFIF" in ASCII followed by a byte equal to 0, and specifies that this must be the first segment in the file, hence making it simple to recognize a JFIF file. Exif images recorded by digital cameras generally do not include this segment, but typically comply in all other respects with the JFIF standard.

Color space

The JPEG standard used for the compression coding in JFIF files does not define which color encoding is to be used for images. JFIF defines the color model to be used: either Y for greyscale, or YCbCr derived from RGB color primaries as defined in CCIR 601, except with a different "full range" scaling of the Y, Cb and Cr components. Unlike the "studio range" defined in CCIR 601, in which black is represented by Y=16 and white by Y=235 and values outside of this range are available for signal processing "headroom" and "footroom", JFIF uses all 256 levels of the 8-bit representation, so that Y=0 for black and Y=255 for peak white. The RGB color primaries defined in JFIF via CCIR 601 also differ somewhat from what has become common practice in newer applications. Moreover, CCIR 601 did not provide a precise definition of the RGB color primaries; it relied instead on the underlying practices of the television industry.
Color interpretation of a JFIF image may be improved by embedding an ICC profile, colorspace metadata, or an sRGB tag, and using an application that interprets this information.

File format structure

A JFIF file consists of a sequence of markers or marker segments. The markers are defined in part 1 of the JPEG Standard. Each marker consists of two bytes: an FF byte followed by a byte which is not equal to 00 or FF and specifies the type of the marker. Some markers stand alone, but most indicate the start of a marker segment that contains data bytes according to the following pattern:
FF xx s1 s2
The bytes s1 and s2 are taken together to represent a big-endian 16-bit integer specifying the length of the following "data bytes" plus the 2 bytes used to represent the length. In other words, s1 and s2 specify the number of the following data bytes as.
According to part 1 of the JPEG standard, applications can use APP marker segments and define an application specific meaning of the data. In the JFIF standard, the following APP marker segments are defined:
They are described below.
The JFIF standard requires that the JFIF APP0 marker segment immediately follows the SOI marker. If a JFIF extension APP0 marker segment is used, it must immediately follow the JFIF APP0 marker segment. So a JFIF file will have the following structure:

JFIF APP0 marker segment

In the mandatory JFIF APP0 marker segment the parameters of the image are specified. Optionally an uncompressed thumbnail can be embedded.

JFIF extension APP0 marker segment

Immediately following the JFIF APP0 marker segment may be a JFIF extension APP0 marker segment. This segment may only be present for JFIF versions 1.02 and above. It allows to embed a thumbnail image in 3 different formats.
The thumbnail data depends on the thumbnail format as follows:

Compatibility

The newer Exchangeable image file format is comparable to JFIF, but the two standards are mutually incompatible. This is because both standards specify that their particular application segment must immediately follow the SOI marker. In practice, many programs and digital cameras produce files with both application segments included. This will not affect the image decoding for most decoders, but poorly designed JFIF or Exif parsers may not recognise the file properly.
JFIF is compatible with Adobe Photoshop's JPEG "Information Resource Block" extensions, and IPTC Information Interchange Model metadata, since JFIF does not preclude other application segments, and the Photoshop extensions are not required to be the first in the file. However, Photoshop generally saves CMYK buffers as four-component "Adobe JPEGs" that are not conformant with JFIF. Since these files are not in a YCbCr color space, they are typically not decodable by Web browsers and other Internet software.

History

Development of the JFIF document was led by Eric Hamilton of C-Cube Microsystems, and agreement on the first version was established in late 1991 at a meeting held at C-Cube involving about 40 representatives of various computer, telecommunications, and imaging companies. Shortly afterwards, a minor revision was published — JFIF 1.01. For nearly 20 years, the latest version available was v1.02, published September 1, 1992.
In 1996, RFC 2046 specified that the image format used for transmitting JPEG images across the internet should be JFIF. The MIME type of "image/jpeg" must be encoded as JFIF. In practice, however, virtually all Internet software can decode any baseline JIF image that uses Y or YCbCr components, whether it is JFIF compliant or not.
As time went by, C-Cube was restructured, and lost interest in the document, and the specification had no official publisher until it was picked up by Ecma International and the ITU-T/ISO/IEC Joint Photographic Experts Group around 2009 to avoid it being lost to history and provide a way to formally cite it in standard publications and improve its editorial quality. It was published by ECMA in 2009 as Technical Report number 98 to avoid loss of the historical record,
and it was formally standardized by ITU-T in 2011 as its Recommendation T.871
and by ISO/IEC in 2013 as ISO/IEC 10918-5, The newer publications included editorial improvements but no substantial technical changes.

Books