home *** CD-ROM | disk | FTP | other *** search
- JPEG File Interchange Format
- Version 1.02
-
-
- September 1, 1992
-
-
-
-
-
-
-
-
-
- Eric Hamilton
- C-Cube Microsystems
- 1778 McCarthy Blvd.
- Milpitas, CA 95035
-
- +1 408 944-6300
- Fax: +1 408 944-6314
- E-mail: eric@c-cube.com
-
-
-
-
- JPEG File Interchange Format
- Version 1.02
-
- Why a File Interchange Format
-
- JPEG File Interchange Format is a minimal file format which enables JPEG
- bitstreams to be exchanged between a wide variety of platforms and
- applications. This minimal format does not include any of the advanced
- features found in the TIFF JPEG specification or any application specific
- file format. Nor should it, for the only purpose of this simplified
- format is to allow the exchange of JPEG compressed images.
-
- JPEG File Interchange Format features
-
- o Uses JPEG compression
- o Uses JPEG interchange format compressed image representation
- o PC or Mac or Unix workstation compatible
- o Standard color space: one or three components. For three components,
- YCbCr (CCIR 601-256 levels)
- o APP0 marker used to specify Units, X pixel density, Y pixel density,
- thumbnail
- o APP0 marker also used to specify JFIF extensions
- o APP0 marker also used to specify application-specific information
-
- JPEG Compression
-
- Although any JPEG process is supported by the syntax of the JPEG File
- Interchange Format (JFIF) it is strongly recommended that the JPEG baseline
- process be used for the purposes of file interchange. This ensures maximum
- compatibility with all applications supporting JPEG. JFIF conforms to the
- JPEG Draft International Standard (ISO DIS 10918-1).
-
- The JPEG File Interchange Format is entirely compatible with the standard
- JPEG interchange format; the only additional requirement is the mandatory
- presence of the APP0 marker right after the SOI marker. Note that JPEG
- interchange format requires (as does JFIF) that all table specifications
- used in the encoding process be coded in the bitstream prior to their use.
-
- Compatible across platforms
-
- The JPEG File Interchange Format is compatible across platforms: for
- example, it does not use any resource forks, supported by the Macintosh but
- not by PCs or workstations.
-
-
- Standard color space
-
- The color space to be used is YCbCr as defined by CCIR 601 (256 levels).
- The RGB components calculated by linear conversion from YCbCr shall not be
- gamma corrected (gamma = 1.0). If only one component is used, that
- component shall be Y.
-
- APP0 marker used to identify JPEG FIF
-
- The APP0 marker is used to identify a JPEG FIF file. The JPEG FIF APP0
- marker is mandatory right after the SOI marker.
-
- The JFIF APP0 marker is identified by a zero terminated string: "JFIF".
- The APP0 can be used for any other purpose by the application provided it
- can be distinguished from the JFIF APP0.
-
- The JFIF APP0 marker provides information which is missing from the JPEG
- stream: version number, X and Y pixel density (dots per inch or dots per
- cm), pixel aspect ratio (derived from X and Y pixel density), thumbnail.
-
- APP0 marker used to specify JFIF extensions
-
- Additional APP0 marker segment(s) can optionally be used to specify JFIF
- extensions. If used, these segment(s) must immediately follow the JFIF
- APP0 marker. Decoders should skip any unsupported JFIF extension
- segments and continue decoding.
-
- The JFIF extension APP0 marker is identified by a zero terminated string:
- "JFXX". The JFIF extension APP0 marker segment contains a 1-byte code
- which identifies the extension. This version, version 1.02, has only
- one extension defined: an extension for defining thumbnails stored in
- formats other than 24-bit RGB.
-
- APP0 marker used for application-specific information
-
- Additional APP0 marker segments can be used to hold application-specific
- information which does not affect the decodability or displayability of
- the JFIF file. Application-specific APP0 marker segments must appear
- after the JFIF APP0 and any JFXX APP0 segments. Decoders should skip any
- unrecognized application-specific APP0 segments.
-
- Application-specific APP0 marker segments are identified by a zero
- terminated string which identifies the application (not "JFIF" or "JFXX").
- This string should be an organization name or company trademark. Generic
- strings such as dog, cat, tree, etc. should not be used.
-
-
-
- Conversion to and from RGB
-
- Y, Cb, and Cr are converted from R, G, and B as defined in CCIR
- Recommendation 601 but are normalized so as to occupy the full 256 levels
- of a 8-bit binary encoding. More precisely:
-
- Y = 256 * E'y
- Cb = 256 * [ E'Cb ] + 128
- Cr = 256 * [ E'Cr ] + 128
-
- where the E'y, E'Cb and E'Cb are defined as in CCIR 601. Since values of
- E'y have a range of 0 to 1.0 and those for E'Cb and E'Cr have a range of
- -0.5 to +0.5, Y, Cb, and Cr must be clamped to 255 when they are maximum
- value.
-
- RGB to YCbCr Conversion
-
- YCbCr (256 levels) can be computed directly from 8-bit RGB as follows:
-
- Y = 0.299 R + 0.587 G + 0.114 B
- Cb = - 0.1687 R - 0.3313 G + 0.5 B + 128
- Cr = 0.5 R - 0.4187 G - 0.0813 B + 128
-
- NOTE - Not all image file formats store image samples in the order R0, G0,
- B0, ... Rn, Gn, Bn. Be sure to verify the sample order before converting an
- RGB file to JFIF.
-
-
- YCbCr to RGB Conversion
-
- RGB can be computed directly from YCbCr (256 levels) as follows:
-
- R = Y + 1.402 (Cr-128)
- G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
- B = Y + 1.772 (Cb-128)
-
-
- Image Orientation
-
- In JFIF files, the image orientation is always top-down. This means that
- the first image samples encoded in a JFIF file are located in the upper left
- hand corner of the image and encoding proceeds from left to right and top to
- bottom. Top-down orientation is used for both the full resolution image
- and the thumbnail image.
-
- The process of converting an image file having bottom-up orientation to
- JFIF must include inverting the order of all image lines before JPEG encoding.
-
-
- Spatial Relationship of Components
-
- Specification of the spatial positioning of pixel samples within components
- relative to the samples of other components is necessary for proper image
- post processing and accurate image presentation. In JFIF files, the
- position of the pixels in subsampled components are defined with respect
- to the highest resolution component. Since components must be
- sampled orthogonally (along rows and columns), the spatial position of the
- samples in a given subsampled component may be determined by specifying the
- horizontal and vertical offsets of the first sample, i.e. the sample in
- the upper left corner, with respect to the highest resolution component.
-
- The horizontal and vertical offsets of the first sample in a subsampled
- component, Xoffseti[0,0] and Yoffseti[0,0], is defined to be
-
- Xoffseti[0,0] = ( Nsamplesref / Nsamplesi ) / 2 - 0.5
- Yoffseti[0,0] = ( Nlinesref / Nlinesi ) / 2 - 0.5
-
- where
-
- Nsamplesref is the number of samples per line in the largest component,
- Nsamplesi is the number of samples per line in the ith component,
- Nlinesref is the number of lines in the largest component,
- Nlinesi is the number of lines in the ith component.
-
- Proper subsampling of components incorporates an anti-aliasing filter
- which reduces the spectral bandwidth of the full resolution components.
- Subsampling can easily be accomplished using a symmetrical digital filter
- with an even number of taps (coefficients). A commonly used filter for
- 2:1 subsampling utilizes two taps (1/2,1/2).
-
- ED. NOTE: Figures are not available in this plain text version of
- the specification. See the PostScript version for a figure in this
- section.
-
- NOTE - This definition is compatible with industry standards such as
- Postcript Level 2 and QuickTime. This defintition is not compatible with the
- conventions used by CCIR Recommendation 601-1 and other digital video
- formats. For these formats, pre-processing of the chrominance components
- is necessary prior to compression in order to ensure accurate reconstruction
- of the compressed image.
-
-
- JPEG File Interchange Format Specification
-
- The syntax of a JFIF file conforms to the syntax for interchange format
- defined in Annex B of ISO DIS 10918-1. In addition, a JFIF file uses APP0
- marker segments and constrains certain parameters in the frame header as
- defined below.
-
- X'FF', SOI
- X'FF', APP0, length, identifier, version, units, Xdensity, Ydensity,
- Xthumbnail, Ythumbnail, (RGB)n
-
- length (2 bytes) Total APP0 field byte count, including
- the byte count value (2 bytes), but
- excluding the APP0 marker itself
- identifier (5 bytes) = X'4A', X'46', X'49', X'46', X'00'
- This zero terminated string ("JFIF")
- uniquely identifies this APP0 marker.
- This string shall have zero parity
- (bit 7=0).
- version (2 bytes) = X'0102'
- The most significant byte is used for
- major revisions, the least significant
- byte for minor revisions. Version 1.02
- is the current released revision.
- units (1 byte) Units for the X and Y densities.
- units = 0: no units, X and Y specify the
- pixel aspect ratio
- units = 1: X and Y are dots per inch
- units = 2: X and Y are dots per cm
- Xdensity (2 bytes) Horizontal pixel density
- Ydensity (2 bytes) Vertical pixel density
- Xthumbnail (1 byte) Thumbnail horizontal pixel count
- Ythumbnail (1 byte) Thumbnail vertical pixel count
- (RGB)n (3n bytes) Packed (24-bit) RGB values for the
- thumbnail pixels, n = Xthumbnail *
- Ythumbnail
- [ Optional JFIF extension APP0 marker segment(s) - see below ]
- o
- o
- o
- X'FF', SOFn, length, frame parameters
- Number of components Nf = 1 or 3
- 1st component C1 = 1 = Y component
- 2nd component C2 = 2 = Cb component
- 3rd component C3 = 3 = Cr component
- o
- o
- o
- X'FF', EOI
-
- JFIF Extension APP0 Marker Segment
-
- Immediately following the JFIF APP0 marker segment may be a JFIF extension
- APP0 marker. This JFIF extension APP0 marker segment may only be present for
- JFIF versions 1.02 and above. The syntax of the JFIF extension APP0 marker
- segment is:
-
- X'FF', APP0, length, identifier, extension_code, extension_data
- length (2 bytes) Total APP0 field byte count, including
- the byte count value (2 bytes), but
- excluding the APP0 marker itself
- identifier (5 bytes) = X'4A', X'46', X'58', X'58', X'00'
- This zero terminated string ("JFXX")
- uniquely identifies this APP0 marker. This
- string shall have zero parity (bit 7=0).
- extension_code (1 byte) = Code which identifies the
- extension. In this version, the following
- extensions are defined:
- = X'10' Thumbnail coded using JPEG
- = X'11' Thumbnail stored using 1 byte/
- pixel
- = X'13' Thumbnail stored using 3 bytes/
- pixel
- extension_data (variable) = The specification of the remainder
- of the JFIF extension APP0 marker segment
- varies with the extension. See below for
- a specification of extension_data for each
- extension.
-
- JFIF Extension: Thumbnail coded using JPEG
-
- This extension supports thumbnails compressed using JPEG. The compressed
- thumbnail immediately follows the extension_code (X'10') in the
- extension_data field and the length of the compressed data must be
- included in the JFIF extension APP0 marker length field.
-
- The syntax of the extension_data field conforms to the syntax for
- interchange format defined in Annex B of ISO DIS 10918-1. However, no
- "JFIF" or "JFXX" marker segments shall be present. As in the full
- resolution image of the JFIF file, the syntax of extension_data constrains
- parameters in the frame header as defined below:
-
- X'FF', SOI
- o
- o
- o
- X'FF', SOFn, length, frame parameters
- Number of components Nf = 1 or 3
- 1st component C1 = 1 = Y component
- 2nd component C2 = 2 = Cb component
- 3rd component C3 = 3 = Cr component
- o
- o
- o
- X'FF', EOI
-
-
-
- JFIF Extension: Thumbnail stored using one byte per pixel
-
- This extension supports thumbnails stored using one byte per pixel and a
- color palette in the extension_data field. The syntax of extension_data is:
-
- Xthumbnail (1 byte) Thumbnail horizontal pixel count
- Ythumbnail (1 byte) Thumbnail vertical pixel count
- palette (768 bytes) 24-bit RGB pixel values for the color
- palette. The RGB values define the
- colors represented by each value of
- an 8-bit binary encoding (0 - 255).
- (pixel)n (n bytes) 8-bit values for the thumbnail pixels
- n = Xthumbnail * Ythumbnail
-
- JFIF Extension: Thumbnail stored using three bytes per pixel
-
- This extension supports thumbnails stored using three bytes per pixel in the
- extension_data field. The syntax of extension_data is:
-
- Xthumbnail (1 byte) Thumbnail horizontal pixel count
- Ythumbnail (1 byte) Thumbnail vertical pixel count
- (RGB)n (3n bytes) Packed (24-bit) RGB values for the
- thumbnail pixels,
- n = Xthumbnail * Ythumbnail
-
- Useful tips
-
- o you can identify a JFIF file by looking for the following sequence:
- X'FF', SOI, X'FF', APP0, <2 bytes to be skipped>, "JFIF", X'00'.
-
- o if you use APP0 elsewhere, be sure not to have the strings "JFIF" or
- "JFXX" right after the APP0 marker.
-
- o if you do not want to include a thumbnail, just program Xthumbnail =
- Ythumbnail = 0.
-
- o be sure to check the version number in the special APP0 field. In
- general, if the major version number of the JFIF file matches that
- supported by the decoder, the file will be decodable.
-
- o if you only want to specify a pixel aspect ratio, put 0 for the units
- field in the special APP0 field. Xdensity and Ydensity can then be
- programmed for the desired aspect ratio. Xdensity = 1, Ydensity = 1
- will program a 1:1 aspect ratio. Xdensity and Ydensity should
- always be non-zero.
-
-
-