| Navigate!  Articles Essential JPEG 
IPN Wizard Wide-Angle Photo Corrector The Eye Mouse Inverted Pendulum Project Digital 
Goods Delivery Verification System   |  | 
 Brought to you by BioElectroMech Before the image data is ever loaded when a JPEG image is selected for viewing the
markers must be read.  In a JPEG image, the very first marker is the SOI, or Start Of
Image, marker.  This is the first "hey, I'm a JPEG" declaration by the
file.  The JPEG standard, as written by the Joint Picture Expert's Group, specified
the JPEG interchange format.  This format had several shortcomings for which the JFIF
(JPEG File Interchange Format) was an attempted remedy.  The JFIF is the format used
by almost all JPEG file readers/writers.  It tells the image readers, "Hey, I'm
a JPEG that almost anyone can understand." Most markers will have additional information following them.  When this is the
case, the marker and its associated information is referred to as a "header."
  In a header the marker is immediately followed by two bytes that indicate the
length of the information, in bytes, that the header contains.  The two bytes that
indicate the length are always included in that count. A marker is prefixed by FF (hexadecimal).  The marker/header information that
follows does not specify all known markers, just the essential ones for baseline JPEG. A component is a specific color channel in an image.  For instance, an RGB image
contains three components; Red, Green, and Blue. © 1998 by James R. Weeks 
 Start of Image (SOI) marker -- two bytes (FFD8) JFIF marker (FFE0) 
  length -- two bytesidentifier -- five bytes: 4A, 46, 49, 46, 00 (the ASCII code equivalent of a zero
      terminated "JFIF" string)version -- two bytes: often 01, 02
    the most significant byte is used for major revisionsthe least significant byte for minor revisions 
  units -- one byte: Units for the X and Y densities
    0 => no units, X and Y specify the pixel aspect ratio1 => X and Y are dots per inch2 => X and Y are dots per cmXdensity -- two bytesYdensity -- two bytesXthumbnail -- one byte: 0 = no thumbnailYthumbnail -- one byte: 0 = no thumbnail(RGB)n -- 3n bytes: packed (24-bit) RGB values for the thumbnail pixels, n = Xthumbnail
      * Ythumbnail Define Quantization table marker (FFDB) 
  the first two bytes, the length, after the marker indicate the number of bytes,
      including the two length bytes, that this header contains until the length is exhausted (loads two quantization tables for baseline JPEG)
    the precision and the quantization table index -- one byte: precision is specified by
          the higher four bits and index is specified by the lower four bits
      precision in this case is either 0 or 1 and indicates the precision of the quantized
              values; 8-bit (baseline) for 0 and  up to 16-bit for 1the quantization values -- 64 bytes
      the quantization tables are stored in zigzag format Define Huffman table marker (FFC4) 
  the first two bytes, the length, after the marker indicate the number of bytes,
      including the two length bytes, that this header containsuntil length is exhausted (usually four Huffman tables)
    index -- one byte: if >15 (i.e. 0x10 or more) then an AC table, otherwise a DC tablebits -- 16 bytesHuffman values -- # of bytes = the sum of the previous 16 bytes Start of frame marker (FFC0) 
  the first two bytes, the length, after the marker indicate the number of bytes,
      including the two length bytes, that this header containsP -- one byte: sample precision in bits (usually 8, for baseline JPEG)Y -- two bytesX -- two bytesNf -- one byte: the number of components in the image
    3 for color baseline JPEG images1 for grayscale baseline JPEG images 
  Nf times:
    Component ID -- one byteH and V sampling factors -- one byte: H is first four bits and V is second four bitsQuantization table number-- one byte The H and V sampling factors dictate the final size of the component they are
associated with. For instance, the color space defaults to YCbCr and the H and V sampling
factors for each component, Y, Cb, and Cr, default to 2, 1, and 1, respectively (2 for
both H and V of the Y component, etc.) in the Jpeg-6a library by the Independent Jpeg
Group. While this does mean that the Y component will be twice the size of the other two
components--giving it a higher resolution, the lower resolution components are quartered
in size during compression in order to achieve this difference. Thus, the Cb and Cr
components must be quadrupled in size during decompression. Start of Scan marker (FFDA) 
  the first two bytes, the length, after the marker indicate the number of bytes,
      including the two length bytes, that this header containsNumber of components, n -- one byte: the number of components in this scann times:
    Component ID -- one byteDC and AC table numbers -- one byte: DC # is first four bits and AC # is last four bitsSs -- one byteSe -- one byteAh and Al -- one byte Comment marker (FFFE) 
  the first two bytes, the length, after the marker indicate the number of bytes,
      including the two length bytes, that this header contains End of Image (EOI) marker (FFD9) |