Jump to content

JPEG File Interchange Format

From Wikipedia, the free encyclopedia
(Redirected fromJFIF)

TheJPEG File Interchange Format(JFIF) is animage file formatstandard published asITU-TRecommendation T.871 andISO/IEC10918-5. It defines supplementary specifications for thecontainer formatthat contains the image data encoded with theJPEGalgorithm. The base specifications for a JPEG container format are defined in Annex B of the JPEG standard, known asJPEG Interchange Format(JIF). JFIF builds over JIF to solve some of JIF's limitations, including unnecessary complexity, component sample registration, resolution, aspect ratio, andcolor space.Because JFIF is not the original JPG standard, one might expect anotherMIMEtype. However, it is still registered as "image/jpeg" (indicating its primary data format rather than the amended information).

JFIF ismutually incompatiblewith the newerExchangeable image file format(Exif).

Purpose

[edit]

JFIF defines a number of details that are left unspecified by the JPEG Part 1 standard (ISO/IEC10918-1,ITU-TRecommendation T.81.)[1]

Component sample registration

[edit]

JPEG allows multiple components (such asY, Cb, and Cr) to have different resolutions, but it does not define how those differing sample arrays (which render bitmaps) should be aligned. This pixel-producing information is rendered with the expectation of indicating rectangles by theircentroid,rather than being pixel data directly, or being 'first corner and flood', etc. which is uncommon.

Resolution and aspect ratio

[edit]

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 thenull-terminated stringspelling "JFIF" inASCIIfollowed 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.Exifimages recorded by digital cameras generally do not include this segment, but typically comply in all other respects with the JFIF standard.

Color space

[edit]

The JPEG standard used for the compression coding in JFIF files does not define whichcolor encodingis to be used for images. JFIF defines thecolor modelto be used: either Y for greyscale, orYCbCrderived fromRGB color primariesas defined inCCIR 601(now known as Rec. ITU-R BT.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 (e.g., they differ slightly from the color primaries defined insRGB). Moreover, CCIR 601 (before 2007) 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 anICCprofile, colorspace metadata, or ansRGBtag, and using an application that interprets this information.

File format structure

[edit]

A JFIF file consists of a sequence of markers or marker segments (for details refer toJPEG, Syntax and structure). The markers are defined in part 1 of theJPEGStandard.[1]Each marker consists of two bytes: anFFbyte followed by a byte which is not equal to00orFFand 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:

FFxxs1s2[data bytes]

The bytess1ands2are 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,s1ands2specify the number of the followingdata bytesas.

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:

  • JFIF APP0 marker segment (JFIF segment for short) (mandatory)
  • JFIF extension APP0 marker segment (JFXX segment for short) (optional)

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.[2]So a JFIF file will have the following structure:

JFIF file structure
Segment Code Description
SOI FF D8 Start of Image
JFIF-APP0 FF E0s1s24A 46 49 46 00... see below
JFXX-APP0 FF E0s1s24A 46 58 58 00... optional, see below
…additional marker segments
(for example SOF, DHT, COM)
SOS FF DA Start of Scan
compressed image data
EOI FF D9 End of Image

JFIF APP0 marker segment

[edit]

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

JFIF APP0 marker segment
Field Size (bytes) Description
APP0 marker 2 FF E0
Length 2 Length of segment excluding APP0 marker
Identifier 5 4A 46 49 46 00= "JFIF" inASCII,terminated by a null byte
JFIF version 2 First byte for major version, second byte for minor version (01 02for 1.02)
Density units 1 Units for the following pixel density fields
  • 00:No units; width:heightpixel aspect ratio= Ydensity:Xdensity
  • 01:Pixels per inch (2.54 cm)
  • 02:Pixels per centimeter
Xdensity 2 Horizontal pixel density. Must not be zero
Ydensity 2 Vertical pixel density. Must not be zero
Xthumbnail 1 Horizontal pixel count of the following embedded RGB thumbnail. May be zero
Ythumbnail 1 Vertical pixel count of the following embedded RGB thumbnail. May be zero
Thumbnail data 3 ×n Uncompressed 24 bit RGB (8 bits per color channel) raster thumbnail data in the order R0, G0, B0,... Rn-1, Gn-1, Bn-1; withn= Xthumbnail × Ythumbnail

JFIF extension APP0 marker segment

[edit]

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.

JFIF extension APP0 marker segment
Field Size (bytes) Description
APP0 marker 2 FF E0
Length 2 Length of segment excluding APP0 marker
Identifier 5 4A 46 58 58 00= "JFXX" inASCII,terminated by a null byte
Thumbnail format 1 Specifies what data format is used for the following embedded thumbnail:
  • 10:JPEG format
  • 11:1 byte per pixel palettized format
  • 13:3 byte per pixel RGB format
Thumbnail data variable Depends on the thumbnail format, see below

The thumbnail data depends on the thumbnail format as follows:

Thumbnail stored using JPEG encoding
Field Size (bytes) Description
SOI 2 FF D8
variable Must be JIF format using YCbCr or just Y, and must not contain JFIF or JFXX segments
EOI 2 FF D9
Thumbnail stored using one byte per pixel
Field Size (bytes) Description
Xthumbnail 1 Horizontal pixel count of the following embedded thumbnail. Must not be zero
Ythumbnail 1 Vertical pixel count of the following embedded thumbnail. Must not be zero
Thumbnail palette 768 256 palette entries, each containing a 24 bit RGB color value
Thumbnail data n One byte per pixel containing the index of the color within the palette,

withn= Xthumbnail × Ythumbnail

Thumbnail stored using three byte per pixel
Field Size (bytes) Description
Xthumbnail 1 Horizontal pixel count of the following embedded thumbnail. Must not be zero
Ythumbnail 1 Vertical pixel count of the following embedded thumbnail. Must not be zero
Thumbnail data 3 ×n Uncompressed 24 bit RGB (8 bits per color channel) raster thumbnail data in the order R0, G0, B0,... Rn-1, Gn-1, Bn-1; withn= Xthumbnail × Ythumbnail

Compatibility

[edit]

The newerExchangeable image file format(Exif) is comparable to JFIF, but the two standards are mutually incompatible. This is because both standards specify that their particular application segment (APP0 for JFIF, APP1 for Exif) 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 AdobePhotoshop's JPEG "Information Resource Block" extensions, andIPTC Information Interchange Modelmetadata, 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

[edit]

Development of the JFIF document was led by Eric Hamilton ofC-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.[3]For nearly 20 years, the latest version available was v1.02, published September 1, 1992.[2]

In 1996,RFC2046 specified that the image format used for transmitting JPEG images across the Internet should be JFIF. TheMIME typeof "image/jpeg" must be encoded as JFIF. In practice, however, virtually all Internet software can decode any baselineJIFimage that uses Y or YCbCr components, whether it is JFIF compliant or not.

As time went by, C-Cube was restructured (and eventually devolved intoHarmonic,LSI Logic,Magnum Semiconductor,Avago Technologies,Broadcom,and GigOptix, GigPeak, etc), and lost interest in the document, and the specification had no official publisher until it was picked up byEcma Internationaland the ITU-T/ISO/IECJoint Photographic Experts Grouparound 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,[3] and it was formally standardized byITU-Tin 2011 as its Recommendation T.871[4] and by ISO/IEC in 2013 as ISO/IEC 10918-5,[5]The newer publications included editorial improvements but no substantial technical changes.

See also

[edit]

References

[edit]
  1. ^ab"Recommendation ITU-T T.81: Information technology – Digital compression and coding of continuous-tone still images – Requirements and guidelines"(PDF).ITU-T (formerly CCITT).18 February 1992.Retrieved15 June2015.
  2. ^abHamilton, Eric (12 September 1992)."JPEG File Interchange Format, Version 1.02"(pdf, 0.02 MB).Retrieved15 June2015.
  3. ^ab"JPEG File Interchange Format (JFIF)".ecma-international.org.2009.Retrieved15 June2015.
  4. ^"Recommendation ITU-T T.871: Information technology – Digital compression and coding of continuous-tone still images: JPEG File Interchange Format (JFIF)"(PDF).ITU-T. 14 May 2011.Retrieved15 June2015.
  5. ^"ISO/IEC 10918-5:2013: Information technology – Digital compression and coding of continuous-tone still images: JPEG File Interchange Format (JFIF)".ISO/International Electrotechnical Commission. 1 May 2013.Retrieved15 June2015.

Further reading

[edit]

Books

[edit]

Standards

[edit]