Theoretical Paper
- Computer Organization
- Data Structure
- Digital Electronics
- Object Oriented Programming
- Discrete Mathematics
- Graph Theory
- Operating Systems
- Software Engineering
- Computer Graphics
- Database Management System
- Operation Research
- Computer Networking
- Image Processing
- Internet Technologies
- Micro Processor
- E-Commerce & ERP
Practical Paper
Industrial Training
JPEG File Layout and Format
JPEG File Layout and Format
APP0 (JFIF segment marker) marker:
Field Size Description
Marker Identifier 2 bytes 0xff, 0xe0 to identify APP0 marker
Length 2 bytes It must be >= 16
File Identifier Mark 5 bytes This identifies JFIF.
'JFIF'#0 (0x4a, 0x46, 0x49, 0x46, 0x00)
Major revision number 1 byte Should be 1, otherwise error
Minor revision number 1 byte Should be 0..2, otherwise try to decode anyway
Units for x/y densities 1 byte 0 = no units, x/y-density specify the aspect ratio instead
1 = x/y-density are dots/inch
2 = x/y-density are dots/cm
X-density 2 bytes It should be <> 0
Y-density 2 bytes It should be <> 0
Thumbnail width 1 byte -------
Thumbnail height 1 byte -------
Bytes to be read n bytes For thumbnail (RGB 24 bit), n = width*height*3 bytes should be read immediately followed by thumbnail height
Remarks:
-
- If there's no 'JFIF'#0, or the length is < 16, then it is probably not a JFIF segment and should be ignored.
-
- Normally units=0, x-dens=1, y-dens=1, meaning that the aspect ratio is 1:1 (evenly scaled).
-
- JFIF files including thumbnails are very rare, the thumbnail can usually be ignored. If there's no thumbnail, then width=0 and height=0.If the length doesn't match the thumbnail size, a warning may be printed, then continue decoding.
DHT( Define Huffman Table) marker:
Field Size Description
Marker Identifier 2 bytes 0xff, 0xc4 to identify DHT marker
Length 2 bytes This specify length of Huffman table
HT information 1 byte bit 0..3 : number of HT (0..3, otherwise error)
bit 4 : type of HT, 0 = DC table, 1 = AC table
bit 5..7 : not used, must be 0
Number of Symbols 16 bytes Number of symbols with codes of length 1..16,
the sum(n) of these bytes is the total number of codes,
which must be <= 256
Symbols n bytes Table containing the symbols in order of increasing
code length ( n = total number of codes ).
Remarks: A single DHT segment may contain multiple HTs, each with its own information byte.
DRI (Define Restart Interval) marker:
Field Size Description
Marker Identifier 2 bytes 0xff, 0xdd identifies DRI marker
Length 2 bytes It must be 4
Restart interval 2 bytes This is in units of MCU blocks, means that every n MCU
blocks a RSTn marker can be found. The first marker will
be RST0, then RST1 etc, after RST7 repeating from RST0.
DQT (Define Quantization Table) marker:
Field Size Description
Marker Identifier 2 bytes 0xff, 0xdb identifies DQT
Length 2 bytes This gives the length of QT.
QT information 1 byte bit 0..3: number of QT (0..3, otherwise error)
bit 4..7: precision of QT, 0 = 8 bit, otherwise 16 bit
Bytes n bytes This gives QT values, n = 64*(precision+1)
Remarks:
-
- A single DQT segment may contain multiple QTs, each with its own information byte.
-
- For precision=1 (16 bit), the order is high-low for each of the 64 words.
DAC (Define Arithmetic Table) marker:
-
Current software does not support arithmetic coding .
-
JPEG files using arithmetic coding can not be processed.
SOS (Start Of Scan) marker:
Field Size Description
Marker Identifier 2 bytes 0xff, 0xda identify SOS marker
Length 2 bytes This must be equal to 6+2*(number of components in scan).
Number of
Components in scan 1 byte This must be >= 1 and <=4 (otherwise error), usually 1 or 3
Each component 2 bytes For each component, read 2 bytes. It contains,
1 byte Component Id (1=Y, 2=Cb, 3=Cr, 4=I, 5=Q),
1 byte Huffman table to use :
bit 0..3 : AC table (0..3)
bit 4..7 : DC table (0..3)
Ignorable Bytes 3 bytes We have to skip 3 bytes.
Remarks: The image data (scans) is immediately following the SOS segment.