jpg文件格式


原文链接: jpg文件格式

在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。
关键点:

  1. 头标识 0x00: ff d8
  2. 量化表 0x15: ff db
  3. 帧开始 0x100: ff c0 (紧跟其后的3个字节为图像的高度h和宽度w)
    文件结构
    JFIF文件格式直接使用JPEG标准爲应用程式定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个位元组组成,其前一个位元组是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充位元组(fill byte)。下面是其中的8个标记:
  4. SOI  0xD8           图像开始
  5. APP0 0xE0           JFIF应用资料块
  6. APPn 0xE1 - 0xEF    其他的应用资料块(n, 1~15)
  7. DQT  0xDB           量化表
  8. SOF0 0xC0           帧开始
  9. DHT  0xC4           霍夫曼(Huffman)表
  10. SOS  0xDA           扫描线开始
  11. EOI  0xD9           图像结束
    爲使读者对JPEG定义的标记一目了然,现将JPEG的标记码列於表6-05,并保留英文解释。
    表6-05 JPEG定义的标记
    Symbol(符号) Code Assignment(标记代码) Deforbiddenion(说明)

Start Of Frame markers, non-hierarchical Huffman coding

  • SOF0 0xFFC0 Baseline DCT
    SOF1 0xFFC1 Extended sequential DCT
    SOF2 0xFFC2 Progressive DCT
    SOF3 0xFFC3 Spatial (sequential) lossless
    Huffman table specification
  • DHT 0xFFC4 Define Huffman table(s)

Start Of Frame markers, hierarchical Huffman coding
SOF5 0xFFC5 Differential sequential DCT
SOF6 0xFFC6 Differential progressive DCT
SOF7 0xFFC7 Differential spatial lossless

Start Of Frame markers, non-hierarchical arithmetic coding
JPG 0xFFC8 Reserved for JPEG extensions
SOF9 0xFFC9 Extended sequential DCT
SOF10 0xFFCA Progressive DCT
SOF11 0xFFCB Spatial (sequential) Lossless

arithmetic coding conditioning specification
DAC 0xFFCC Define arithmetic conditioning table

Start Of Frame markers, hierarchical arithmetic coding
SOF13 0xFFCD Differential sequential DCT
SOF14 0xFFCE Differential progressive DCT
SOF15 0xFFCF Differential spatial Lossless

Restart interval termination
RSTm 0xFFD0~0xFFD7 Restart with modulo 8 counter m
Other marker
SOI 0xFFD8 Start of image
EOI 0xFFD9 End of image
SOS 0xFFDA Start of scan
DQT 0xFFDB Define quantization table(s)
DNL 0xFFDC Define number of lines
DRI 0xFFDD Define restart interval
DHP 0xFFDE Define hierarchical progression
EXP 0xFFDF Expand reference image(s)
APPn 0xFFE0~0xFFEF Reserved for application use
JPGn 0xFFF0~0xFFFD Reserved for JPEG extension
COM 0xFFFE Comment
Reserved markers
TEM 0xFF01 For temporary use in arithmetic coding
RES 0xFF02~0xFFBF Reserved

JPEG文件由下面的8个部分组成:
(1) 图像开始SOI(Start of Image)标记 2字节 FF D8

(2) APP0标记(Marker) 2字节 FF E0

① APP0长度(length) 2字节  00 10
② 识别字(identifier) 5字节
③ 版本号(version) 1字节 主 1字节 次
④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米) 1字节
⑤ X方向图元密度(X density) 2字节
⑥ Y方向图元密度(Y density) 2字节
⑦ 缩略图水平图元数目(thumbnail horizontal pixels) 1字节
⑧ 缩略图垂直图元数目(thumbnail vertical pixels) 1字节
⑨ 缩略图RGB点阵图(thumbnail RGB bitmap) 3*n 字节

(3) APPn标记(Markers),其中n=1~15(任选)

① APPn长度(length)
② 由於详细资讯(application specific information)

(4) 一个或者多个量化表DQT(difine quantization table) 2字节 FF DB

① 量化表长度(quantization table length)  2字节 00 84
② 量化表数目(quantization table number)
③ 量化表(quantization table)

(5) 帧图像开始SOF0(Start of Frame) 2字节 FF C0

① 帧开始长度(start of frame length)  2字节 00 11
② 精度(precision),每个顔色分量每个图元的位元数(bits per pixel per color component) 1字节
③ 图像高度(image height) 2字节
④ 图像宽度(image width) 2字节
⑤ 顔色分量数(number of color components)
⑥ 对每个顔色分量(for each component)
  o        ID
  o        垂直方向的样本因数(vertical sample factor)
  o        水平方向的样本因数(horizontal sample factor)
  o        量化表号(quantization table#)

(6) 一个或者多个霍夫曼表DHT(Difine Huffman Table)

① 霍夫曼表的长度(Huffman table length)
② 类型、AC或者DC(Type, AC or DC)
③ 索引(Index)
④ 位表(bits table)
⑤ 值表(value table)

(7) 扫描开始SOS(Start of Scan)

① 扫描开始长度(start of scan length)
② 顔色分量数(number of color components)
③ 每个顔色分量
  o        ID
  o        交流系数表号(AC table #)
  o        直流系数表号(DC table #)
④ 压缩图像资料(compressed image data)

(8) 图像结束EOI(End of Image) 2字节 FF D9

表6-06表示了APP0域的详细结构。有兴趣的读者可通过UltraEdit或者PC TOOLS等工具软体打开一个JPG图像文件,对APP0的结构进行分析和验证。
表6-06 JFIF格式中APP0域的详细结构
偏移 长度 内容 块的名称 说明
0 2 byte 0xFFD8 (Start of Image,SOI) 图像开始
2 2 byte 0xFFE0 APP0(JFIF application segment) JFIF应用资料块
4 2 bytes   length of APP0 block APP0块的长度
6 5 bytes   "JFIF"+"0" 识别APP0标记
11 1 byte   主要版本号(如版本1.02中的1)
12 1 byte   次要版本号(如版本1.02中的02)
13 1 byte   and Y densities> X和Y的密度单位
units=0:无单位
units=1:点数/英寸
units=2:点数/厘米
14 2 bytes   水平方向图元密度
16 2 bytes   垂直方向图元密度
18 1 byte   缩略图水平图元数目
19 1 byte   缩略图垂直图元数目
  3n   < Thumbnail RGB bitmap> 缩略RGB点阵图(n爲缩略图的图元数)
      Optional JFIF extension APP0 marker segment(s) 任选的JFIF扩展APP0标记段
  ……   ……  
  2 byte 0xFFD9 (EOI) end-of-file 图像文件结束标记

`