jpeg文件格式

JPEG文件由八个部分组成,每个部分的标记字节为两个,首字节固定为:0xFF,当然,准许在其前面再填充多个0xFF,以最后一个为准。下面为各部分的名称和第二个标记字节的数值,用ultraedit的16进制搜索功能可找到各部分的起始位置,在嵌入式系统中可用类似的数值匹配法定位。
一、图像开始SOI(Start of Image)标记,数值0xD8
二、APP0标记(Marker),数值0xE0
1、APP0长度(length)
2、标识符(identifier)
3、版本号(version)
4、X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)
5、X方向像素密度(X density)
6、Y方向像素密度(Y density)
7、缩略图水平像素数目(thumbnail horizontal pixels)
8、缩略图垂直像素数目(thumbnail vertical pixels)
9、缩略图RGB位图(thumbnail RGB bitmap),由前面的数值决定,取值3n,n为缩略图总像素
三、APPn标记(Markers),其中n=1~15,数值对应0xE1~0xEF   
1、APPn长度(length)
2、应用细节信息(application specific information)
四、一个或者多个量化表DQT(difine quantization table),数值0xDB
1、量化表长度(quantization table length)
2、量化表数目(quantization table number)
3、量化表(quantization table)
五、帧图像开始SOF0(Start of Frame),数值0xC0
1、帧开始长度(start of frame length)
2、精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)
3、图像高度(image height)
4、图像宽度(image width)
5、颜色分量数(number of color components)
6、对每个颜色分量(for each component)
包括:ID、垂直方向的样本因子(vertical sample factor)、水平方向的样本因子(horizontal sample factor) 、量化表号(quantization table#)
六、一个或者多个霍夫曼表DHT(Difine Huffman Table),数值0xC4
1、霍夫曼表的长度(Huffman table length)
2、类型、AC或者DC(Type, AC or DC)
3、索引(Index)
4、位表(bits table)
5、值表(value table)
七、扫描开始SOS(Start of Scan),数值0xDA
1、扫描开始长度(start of scan length)
2、颜色分量数(number of color components)
3、每个颜色分量
包括:ID、交流系数表号(AC table #)、直流系数表号(DC table #)
4、压缩图像数据(compressed image data)
八、图像结束EOI(End of Image),数值0xD9

 

 

实用资料——jpeg文件结构

其它知识 2009-12-08 14:25:17 阅读88 评论0 字号:

微处理机中的存放顺序有正序(big endian)和逆序(little endian)之分。正序存放就是高字节存放在前低字节在后,而逆序存放就是低字节在前高字节在后。例如,十六进制数为A02B,正序存放就是A02B,逆序存放就是2BA0。摩托罗拉(Motorola)公司的微处理器使用正序存放,而英特尔(Intel)公司的微处理器使用逆序。JPEG文件中的字节是按照正序排列的。

JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF)版本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。 JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:

JPEG的标记码列于下表:

JPEG定义的标记

Symbol

(符号)
 Code Assignment

(标记代码)
 Description

(说明)
 
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
 
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
 
Start Of Frame markers, hierarchical arithmetic coding
 
SOF13
 0xFFCD
 Differential sequential DCT
 
SOF14
 0xFFCE
 Differential progressive DCT
 
SOF15
 0xFFCF
 Differential spatial Lossless
 
Huffman table specification
 
DHT
 0xFFC4
 Define Huffman table(s)
 
arithmetic coding conditioning specification
 
DAC
 0xFFCC
 Define arithmetic conditioning table
 
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) APP0标记(Marker)

        ① APP0长度(length)

        ② 标识符(identifier)

        ③ 版本号(version)

        ④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)

        ⑤ X方向像素密度(X density)

        ⑥ Y方向像素密度(Y density)

        ⑦ 缩略图水平像素数目(thumbnail horizontal pixels)

        ⑧ 缩略图垂直像素数目(thumbnail vertical pixels)

        ⑨ 缩略图RGB位图(thumbnail RGB bitmap)

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

        ① APPn长度(length)

        ② 由于详细信息(application specific information)

    (4) 一个或者多个量化表DQT(difine quantization table)

        ① 量化表长度(quantization table length)

        ② 量化表数目(quantization table number)

        ③ 量化表(quantization table)

    (5) 帧图像开始SOF0(Start of Frame)

        ① 帧开始长度(start of frame length)

        ② 精度(precision),每个颜色分量每个像素的位数(bits per pixel per color component)

        ③ 图像高度(image height)

        ④ 图像宽度(image width)

        ⑤ 颜色分量数(number of color components)

        ⑥ 对每个颜色分量(for each component)

ID
垂直方向的样本因子(vertical sample factor)
水平方向的样本因子(horizontal sample factor)
量化表号(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)

        ③ 每个颜色分量

ID
交流系数表号(AC table #)
直流系数表号(DC table #)
        ④ 压缩图像数据(compressed image data)

    (8) 图像结束EOI(End of Image)

下表表示了APP0域的详细结构。有兴趣可通过UltraEdit或者PC TOOLS等工具软件打开一个JPG图像文件,对APP0的结构进行分析和验证。

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
   <Major version>
 主要版本号(如版本1.02中的1)
 
12
 1 byte
   <Minor version>
 次要版本号(如版本1.02中的02)
 
13
 1 byte
   <Units for the X
and Y densities>
 X和Y的密度单位

units=0:无单位

units=1:点数/英寸

units=2:点数/厘米
 
14
 2 bytes
   <Xdensity>
 水平方向像素密度
 
16
 2 bytes
   <Ydensity>
 垂直方向像素密度
 
18
 1 byte
   <Xthumbnail>
 缩略图水平像素数目
 
19
 1 byte
   <Ythumbnail>
 缩略图垂直像素数目
 
  3n
   < Thumbnail RGB bitmap>
 缩略RGB位图(n为缩略图的像素数)
 
      Optional JFIF extension APP0 marker segment(s)
 任选的JFIF扩展APP0标记段
 
  ……
   ……
  
  2 byte
 0xFFD9
 (EOI) end-of-file
 图像文件结束标记
 


    JPEG文件使用的颜色空间是CCIR 601推荐标准进行的彩色空间(参看第7章)。在这个彩色空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:

       Y = 256 * E'y

      Cb = 256 * [E'Cb] + 128

      Cr = 256 * [E'Cr] + 128
    其中亮度电平E'y和色差电平E'Cb和E'Cb分别是CCIR 601定义的参数。由于E'y的范围是0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y, Cb和Cr的最大值必须要箝到255。于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。

    (1) 从RGB转换成YCbCr

    YCbCr(256级)分量可直接从用8位表示的RGB分量计算得到:

         Y =   0.299R + 0.587G + 0.114B

        Cb = -0.1687R - 0.3313G + 0.5B + 128

     Cr = 0.5R - 0.4187G - 0.0813B + 128

    需要注意的是不是所有图像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。

    (2) 从YCbCr转换成RGB

    RGB分量可直接从YCbCr(256级)分量计算得到:

       R = Y + 1.402(Cr-128)

    G = Y - 0.34414(Cb-128) - 0.71414(Cr-128)

    B = Y + 1.772(Cb-128)


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

SOI  0xD8      图像开始
APP0 0xE0      JFIF应用数据块
APPn 0xE1 - 0xEF     其他的应用数据块(n, 1~15)
DQT  0xDB      量化表
SOF0 0xC0      帧开始
DHT  0xC4      霍夫曼(Huffman)表
SOS  0xDA      扫描线开始
EOI  0xD9      图像结束

你可能感兴趣的:(image,table,application,byte,Motorola,Components)