当前位置:文档之家› JPG图片常用格式之一JFIF结构简介

JPG图片常用格式之一JFIF结构简介

[原创]JPG图片常用格式之一JFIF结构简介
文章标题:[原创]JPG图片常用格式之一JFIF结构简介顶部 公子御风 发布于:2006-01-2703:44 [楼主][原创]JPG图片常用格式之一JFIF结构简介
文章作者:公子御风
信息来源:邪恶八进制信息安全团队(https://www.doczj.com/doc/774011426.html,)

JFIF文件格式即JPEG文件交换格式(JPEGFileInterchongeFormat)。
一般的JFIF文件由下面的9个部分组成:
(字段偏移量字段长度(若未说明“长度不定”则表明在任何情况下长度均为所写的值)字段内容(若未说明“内容不定”则在任何情况下内容均为所写的值,为方便表示还可以把内容设为某值))
(1)图像开始SOI(StartofImage)标记
0h2字节0xFFD8
(2)APP0标记(Marker)
0h2字节0xFFE0
①APP0长度(length)(①~⑨九个字段的总长度)
2h2字节内容不定(①~⑨九个字段的总长度)
②标识符(identifier)
4h5字节0x4A46494600即“JFIF0”
③版本号(version)
9h2字节0x0102JFIF的版本号目前基本上都是1.2
④X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)
bh1字节只有0,1,2三个值可选,其分别代表的意义如上
⑤X方向像素密度(Xdensity)
ch2字节取值范围未知
⑥Y方向像素密度(Ydensity)
eh2字节取值范围未知
⑦缩略图水平像素数目(thumbnailhorizontalpixels)
10h1字节取值范围未知
⑧缩略图垂直像素数目(thumbnailverticalpixels)
11h1字节取值范围未知
⑨缩略图RGB位图(thumbnailRGBbitmap)
12h长度可能是3的倍数内容不定
本段(APP0)可以包含图像的一个微缩版本,存为24位的RGB像素。如果没有微缩图像
(这种情况更常见),则⑦“缩略图水平像素数目”和⑧“缩略图垂直像素数目”的值均为0。
(3)APPn标记(Markers),其中n=1~15(任选)
①APPn长度(length)(①②两个字段的总长度)
②详细信息(applicationspecificinformation)
对每个APP:
若为APPN(N=1~F(以16进制表示,N任选其中一个))
标记
mh2字节0xFFEN
长度
(m+2)h2字节内容不定(设为n(10进制))(本字段与下一字段的总长度)
详细信息
(m+4)hn-2字节(即长度减2)内容不定
(4)一个或者多个量化表DQT(DifineQuantizationTable)
0h2字节0xFFDB
①量化表长度(quantizationtablelength)(①~②两个字段的总长度)
2h2字节内容不定(①~②两个字段的总长度)
②量化表(quantizationtable)
a)P/T(高四位:精度,低四位:表ID)
b)表项
对每个量化表:
P/T(高四位:精度,低四位:表ID)
mh1字节精度,0表示8bit,1表示16bit;ID取值范围为0~3,否则错误
表项
(m+1)h(64×(精度+1))字节内容长,故略
(5)帧图像开始SOF0(StartofF

rame)
0h2字节0xFFC0
①帧开始长度(startofframelength)(①~⑥六个字段的总长度)
2h2字节内容不定(①~⑥六个字段的总长度)
②精度(precision),每个颜色分量每个像素的位数(bitsperpixelpercolorcomponent)
4h1字节每个样本位数,通常是8(大多数软件不支持12和16)
③图像高度(imageheight)
5h2字节内容不定(如果不支持DNL就必须>0)
④图像宽度(imagewidth)
7h2字节内容不定(如果不支持DNL就必须>0)
⑤颜色分量数(numberofcolorcomponents)
9h1字节内容不定(灰度图是1,YCbCr/YIQ彩色图是3,CMYK彩色图是4,我们
这里讨论的JFIF使用的是YCbCr,故这里颜色分量数为3)
⑥对每个颜色分量(foreachcomponent)
a)ID
b)垂直方向的样本因子(verticalsamplefactor)
c)水平方向的样本因子(horizontalsamplefactor)(b)c)共占用1字节,b)占用低4
位,c)占用高4位)
d)量化表号(quantizationtable#)
JFIF格式使用的是YCbCr所以有3个分量(这里特别要注意的是颜色分量的ID号是有
含义的,1代表Y,2代表Cb,3代表Cr,4代表I,5代表Q):
1)ID
ah1字节0x01
(高四位)水平(低四位)垂直样本因子
bh共1字节0x22
量化表号
ch1字节内容不定(本分量使用的量化表的ID号)
2)ID
dh1字节0x02
(高四位)水平(低四位)垂直样本因子
eh共1字节0x11
量化表号
fh1字节内容不定(本分量使用的量化表的ID号)
3)ID
10h1字节0x03
(高四位)水平(低四位)垂直样本因子
11h共1字节0x11
量化表号
12h1字节内容不定(本分量使用的量化表的ID号)
(6)一个或者多个霍夫曼表DHT(DifineHuffmanTable)
0h2字节0xFFC4
①霍夫曼表的长度(Huffmantablelength)(①~②两个字段的总长度)
2h2字节内容不定(①~②两个字段的总长度)
②对每个霍夫曼表(一般情况下,霍夫曼表不止一个,但是绝对不多于4个)
a)表号
b)类型:AC或者DC(Type,ACorDC。其中0为DC表,1为AC表)(a)b)共占用1字
节,a)占用低4位,b)占用高4位)
c)长16个字节的编码,其代码代数和为接下来的编码的长度
d)内容编码
对每个霍夫曼表:
(高四位)类型和(低四位)表号
mh共1字节内容不定(有四个可能:0x00表示第0个DC表,0x01表示第1
个DC表,0x10表示第0个AC表,0x11表示第1个AC表)
长16个字节的编码
(m+1)h16字节内容不定(设这16个字节上数据之和为n)
内容编码
(m+17)hn字节内容长,故略
(7)定义重新开始间隔DRI(DifineRestartInterval)(在没有DRI标记,或

间隔为零时,就不存在重
开始间隔和重开始标记)
0h2字节0xFFDD
①长度
2h2字节0x0004(①~②两个字段的总长度)
②MCU块的单元中的重新开始间隔
4h2字节内容不定(设为n,则意思是说,每n个MCU块就有一个RSTn标记。第一个标记
是RST0,然后是RST1等,RST7后再从RST0重复)
(8)扫描开始SOS(StartofScan)
0h2字节0xFFDA
①扫描开始长度(startofscanlength)
2h2字节内容不定(①~③再加上④的a)b)c)的总长度)
②颜色分量数(numberofcolorcomponents)
4h1字节应该和⑸⑤的值相同(灰度图是1,YCbCr/YIQ彩色图是3,CMYK彩色图是4)
③每个颜色分量
a)ID
b)交流系数表号(ACtable#)
c)直流系数表号(DCtable#)(b)c)共占用1字节,b)占用低4位,c)占用高4位)
由②得到这里的颜色分量数为3(这里的颜色分量的ID号的含义和⑸⑥的一样,1代表
Y,2代表Cb,3代表Cr,4代表I,5代表Q):
1)ID
5h1字节0x01
(高四位)直流(低四位)交流数表号
6h共1字节0x00
2)ID
7h1字节0x02
(高四位)直流(低四位)交流数表号
8h共1字节0x11
3)ID
9h1字节0x03
(高四位)直流(低四位)交流数表号
ah共1字节0x11
④压缩图像数据(compressedimagedata)
a)谱选择开始
bh1字节0x00
b)谱选择结束
ch1字节0x3F
c)两个4位字段,高位和低位的谱选择
dh1字节在基本JPEG中总为00
d)数据
eh长度不定内容长,故略
(9)图像结束EOI(EndofImage)
0h2字节0xFFD9


为了把颜色搞定,小生排版都排了1个多小时,吐血啊,如有不对的地方欢迎大家出


[此贴被EvilOctal在2006-01-2708:37重新编辑](c)Copyleft2003-2007,EvilOctalSecurityTeam.
ThisfileisdecompiledbyanunregisteredversionofChmDecompiler.
Regsiteredversiondoesnotshowthismessage.
YoucandownloadChmDecompilerat:https://www.doczj.com/doc/774011426.html,/


相关主题
文本预览
相关文档 最新文档