JFIF文件格式

 

一般的JFIF文件由下面的9个部分组成:(字段偏移量 字段长度(若未说明“长度不定”则表明在任何情况下长度均为所写的值) 字段内容(若未说明“内容不定”则在任何情况下内容均为所写的值,为方便表示还可以把内容设为某值)),

( 1 )       图像开始SOI(Start of Image)标记

0h 2字节 0xFFD8

( 2 )       APP0标记(Marker)

0h 2字节 0xFFE0

      APP0长度(length)(①~⑨九个字段的总长度)

2h 2字节 内容不定(①~⑨九个字段的总长度)

      标识符(identifier)

4h 5字节 0x4A46494600 即“JFIF0

      版本号(version)

9h 2字节 0x0102 JFIF的版本号目前基本上都是1.2

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

bh 1字节 只有012三个值可选,其分别代表的意义如上]

      X方向像素密度(X density)

ch 2字节 取值范围未知

      Y方向像素密度(Y density)

eh 2字节 取值范围未知

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

10h 1字节 取值范围未知

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

11h 1字节 取值范围未知

      缩略图RGB位图(thumbnail RGB bitmap)

                        12h 长度可能是3的倍数 内容不定

    本段(APP0)可以包含图像的一个微缩版本,存为24位的RGB像素。如果没有微缩图像(这种情况更常见),则⑦“缩略图水平像素数目”和⑧“缩略图垂直像素数目”的值均为0

( 3 )       APPn标记(Markers),其中n=115(任选)

      APPn长度(length)(①②两个字段的总长度)

      详细信息(application specific information)

对每个APP

若为APPNN1F(以16进制表示,N任选其中一个))

·   标记: mh 2字节 0xFFEN

·   长度:(m+2)h 2字节 内容不定(设为n10进制))(本字段与下一字段的总长度)

·   详细信息: (m+4)h n2字节(即长度减2 内容不定

( 4 )       一个或者多个量化表DQT(Difine Quantization Table)

       0h 2字节 0xFFDB

      量化表长度(quantization table length)(①~②两个字段的总长度)

2h 2字节 内容不定(①~②两个字段的总长度)

      量化表(quantization table)

A.      P/T(高四位:精度,低四位:表ID)

B.      表项

对每个量化表:

·  P/T(高四位:精度,低四位:表ID)  mh 1字节 精度, 0 表示 8 bit, 1表示 16 bitID取值范围为03, 否则错误

·  表项    (m+1)h (64×(精度+1))字节 内容长,故略

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

       0h 2字节 0xFFC0

      帧开始长度(start of frame length) (①~⑥六个字段的总长度)

2h 2字节 内容不定(①~⑥六个字段的总长度)

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

4h 1字节 每个样本位数, 通常是 8 (大多数软件不支持 12 16)

      图像高度(image height)  5h 2字节 内容不定(如果不支持 DNL 就必须 >0

      图像宽度(image width)   7h 2字节 内容不定(如果不支持 DNL 就必须 >0

      颜色分量数(number of color components)

9h 1字节 内容不定(灰度图是 1, YCbCr/YIQ 彩色图是 3, CMYK 彩色图是 4,我们这里讨论的JFIF使用的是YCbCr,故这里颜色分量数为3

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

A.      ID

B.      垂直方向的样本因子(vertical sample factor)

C.      水平方向的样本因子(horizontal sample factor) BC共占用1字节,B占用低4位,C占用高4位)

D.      量化表号(quantization table#)

JFIF格式使用的是YCbCr所以有3个分量(这里特别要注意的是颜色分量的ID号是有含义的,1代表Y2代表Cb3代表Cr4代表I5代表Q):

1)       ID
    ah 1
字节 0x01
(高四位)水平(低四位)垂直样本因子
    bh
1字节 0x227
量化表号
    ch 1
字节 内容不定(本分量使用的量化表的ID号)

2)       ID
    dh 1
字节 0x02
(高四位)水平(低四位)垂直样本因子
    eh
1字节 0x11J
量化表号
    fh 1
字节 内容不定(本分量使用的量化表的ID号)

3)       ID
    10h 1
字节 0x03
(高四位)水平(低四位)垂直样本因子
    11h
1字节 0x11
量化表号
    12h 1
字节 内容不定(本分量使用的量化表的ID号)

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

       0h 2字节 0xFFC4

      霍夫曼表的长度(Huffman table length) (①~②两个字段的总长度)

2h 2字节 内容不定(①~②两个字段的总长度)

      对每个霍夫曼表(一般情况下,霍夫曼表不止一个,但是绝对不多于4)

A.      表号

B.      类型:AC或者DC(其中0DC表,1AC)AB共占用1字节,A占用低4位,B占用高4位)

C.      16个字节的编码,其代码代数和为接下来的编码的长度

D.      内容编码

对每个霍夫曼表:

· (高四位)类型和(低四位)表号: mh 1字节 内容不定(有四个可能:0x00表示第0DC表,0x01表示第1DC表,0x10表示第0AC表,0x11表示第1AC表)

·  16个字节的编码: (m+1)h 16字节 内容不定(设这16个字节上数据之和为n

·  内容编码: (m+17)h  n字节 内容长,故略)

( 7 )       定义重新开始间隔DRI(Difine Restart Interval)

    (在没有DRI标记,或间隔为零时,就不存在重新开始间隔和重开始标记)

        0h 2字节 0xFFDD

     长度  2h 2字节 0x0004(①~②两个字段的总长度)

     MCU 块的单元中的重新开始间隔

4h 2字节 内容不定(设为n,则意思是说,每nMCU块就有一个RSTn标记。第一个标记是RST0,然后是RST1等,RST7后再从RST0重复)

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

       0h 2字节 0xFFDA

      扫描开始长度(start of scan length)

2h 2字节 内容不定(①~③再加上④的A/B/C的总长度)

      颜色分量数(number of color components)

4h 1字节 应该和⑸⑤的值相同(灰度图是1, YCbCr/YIQ 彩色图是3, CMYK 彩色图是4

      每个颜色分量

A.      ID

B.      交流系数表号(AC table #)

C.      直流系数表号(DC table #)

BC共占用1字节,B:占用低4位,C:占用高4位)

由②得到这里的颜色分量数为3(这里的颜色分量的ID号的含义和⑸⑥的一样,1代表Y2代表Cb3代表Cr4代表I5代表Q):

1)   ID
5h 1
字节 0x01 (高四位)直流(低四位)交流数表号
6h
1字节 0x00

2)   ID
7h 1
字节 0x027 (高四位)直流(低四位)交流数表号
8h
1字节 0x11

3)   ID
9h 1
字节 0x03  (高四位)直流(低四位)交流数表号
ah
1字节 0x11

      压缩图像数据(compressed image data)

A.      谱选择开始   bh 1字节 0x00

B.      谱选择结束   ch 1字节 0x3F

C.      两个4位字段,高位和低位的谱选择  dh 1字节 在基本JPEG中总为0x00

D.      数据   eh 长度不定 内容长,故略

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

     0h 2字节 0xFFD9

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值