JFIF文件.docx
- 文档编号:10084605
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:17
- 大小:20.66KB
JFIF文件.docx
《JFIF文件.docx》由会员分享,可在线阅读,更多相关《JFIF文件.docx(17页珍藏版)》请在冰点文库上搜索。
JFIF文件
JFIF文件
一. 简介
微处理机中的数据存放顺序有大端(bigendian)小端(littleendian)之分。
大端顺序是指高字节数据存放在低地址处,低字节数据存放在高地址处,而小端顺序是指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。
例如,十六进制数为A02B,按大端顺序存放就是A02B,按小端顺序存放就是2BA0。
摩托罗拉(Motorola)公司的微处理器使用大端顺序存放,而英特尔(Intel)公司的微处理器使用小端顺序。
JPEG文件中的字节是按照大端顺序排列的。
JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。
直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEGFileInterchangeFormat,JFIF)版本号为1.02。
这是1992年9月由在C-CubeMicrosystems公司工作的EricHamilton提出的。
此外还有TIFFJPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。
JPEG文件使用的颜色空间是YCbCr空间。
在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。
这就是说JFIF文件中的第一个图像样本是图像左上角的样本。
二. 文件结构
JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。
JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。
每个标记之前还可以添加数目不限的0xFF填充字节(fillbyte)。
下面是其中的8个标记:
1.SOI 0xD8 图像开始
2.APP00xE0 JFIF应用数据块
3.APPn0xE1-0xEF 其他的应用数据块(n,1~15)
4.DQT 0xDB 量化表
5.SOF00xC0 帧开始
6.DHT 0xC4 霍夫曼(Huffman)表
7.SOS 0xDA 扫描线开始
8.EOI 0xD9 图像结束
为使读者对JPEG定义的标记一目了然,现将JPEG的标记码列于表6-05,并保留英文解释。
表6-05JPEG定义的标记
Symbol
(符号)
CodeAssignment
(标记代码)
Description
(说明)
StartOfFramemarkers,non-hierarchicalHuffmancoding
SOF0
0xFFC0
BaselineDCT
SOF1
0xFFC1
ExtendedsequentialDCT
SOF2
0xFFC2
ProgressiveDCT
SOF3
0xFFC3
Spatial(sequential)lossless
StartOfFramemarkers,hierarchicalHuffmancoding
SOF5
0xFFC5
DifferentialsequentialDCT
SOF6
0xFFC6
DifferentialprogressiveDCT
SOF7
0xFFC7
Differentialspatiallossless
StartOfFramemarkers,non-hierarchicalarithmeticcoding
JPG
0xFFC8
ReservedforJPEGextensions
SOF9
0xFFC9
ExtendedsequentialDCT
SOF10
0xFFCA
ProgressiveDCT
SOF11
0xFFCB
Spatial(sequential)Lossless
StartOfFramemarkers,hierarchicalarithmeticcoding
SOF13
0xFFCD
DifferentialsequentialDCT
SOF14
0xFFCE
DifferentialprogressiveDCT
SOF15
0xFFCF
DifferentialspatialLossless
Huffmantablespecification
DHT
0xFFC4
DefineHuffmantable(s)
arithmeticcodingconditioningspecification
DAC
0xFFCC
Definearithmeticconditioningtable
Restartintervaltermination
RSTm
0xFFD0~0xFFD7
Restartwithmodulo8counterm
Othermarker
SOI
0xFFD8
Startofimage
EOI
0xFFD9
Endofimage
SOS
0xFFDA
Startofscan
DQT
0xFFDB
Definequantizationtable(s)
DNL
0xFFDC
Definenumberoflines
DRI
0xFFDD
Definerestartinterval
DHP
0xFFDE
Definehierarchicalprogression
EXP
0xFFDF
Expandreferenceimage(s)
APPn
0xFFE0~0xFFEF
Reservedforapplicationuse
JPGn
0xFFF0~0xFFFD
ReservedforJPEGextension
COM
0xFFFE
Comment
Reservedmarkers
TEM
0xFF01
Fortemporaryuseinarithmeticcoding
RES
0xFF02~0xFFBF
Reserved
一般的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(StartofFrame)
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字节 0x227
量化表号
ch1字节内容不定(本分量使用的量化表的ID号)
2) ID
dh1字节 0x02
(高四位)水平(低四位)垂直样本因子
eh 共1字节 0x11J
量化表号
fh1字节内容不定(本分量使用的量化表的ID号)
3) ID
10h1字节 0x03
(高四位)水平(低四位)垂直样本因子
11h 共1字节 0x11
量化表号
12h1字节内容不定(本分量使用的量化表的ID号)
(6) 一个或者多个霍夫曼表DHT(DifineHuffmanTable)
0h2字节 0xFFC4
① 霍夫曼表的长度(Huffmantablelength) (①~②两个字段的总长度)
2h2字节内容不定(①~②两个字段的总长度)
② 对每个霍夫曼表(一般情况下,霍夫曼表不止一个,但是绝对不多于4个)
A. 表号
B. 类型:
AC或者DC(其中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)h n字节内容长,故略)
(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字节 0x027 (高四位)直流(低四位)交流数表号
8h 共1字节 0x11
3) ID
9h1字节 0x03 (高四位)直流(低四位)交流数表号
ah 共1字节 0x11
④ 压缩图像数据(compressedimagedata)
A. 谱选择开始 bh1字节 0x00
B. 谱选择结束 ch1字节 0x3F
C. 两个4位字段,高位和低位的谱选择 dh1字节在基本JPEG中总为0x00
D. 数据 eh 长度不定内容长,故略
(9) 图像结束EOI(EndofImage)
0h2字节 0xFFD9
表6-06表示了APP0域的详细结构。
表6-06JFIF格式中APP0域的详细结构
偏移
长度
内容
块的名称
说明
0
2byte
0xFFD8
(StartofImage,SOI)
图像开始
2
2byte
0xFFE0
APP0(JFIFapplicationsegment)
JFIF应用数据块
4
2bytes
lengthofAPP0block
APP0块的长度
6
5bytes
"JFIF"+"0"
识别APP0标记
11
1byte
主要版本号(如版本1.02中的1)
12
1byte
次要版本号(如版本1.02中的02)
13
1byte
andYdensities> X和Y的密度单位 units=0: 无单位 units=1: 点数/英寸 units=2: 点数/厘米 14 2bytes 水平方向像素密度 16 2bytes 垂直方向像素密度 18 1byte 缩略图水平像素数目 19 1byte 缩略图垂直像素数目 3n 缩略RGB位图(n为缩略图的像素数) OptionalJFIFextensionAPP0markersegment(s) 任选的JFIF扩展APP0标记段 …… …… 2byte 0xFFD9 (EOI)end-of-file 图像文件结束标记 另: JPEG定义的标记(中文版) 标记名 标记代码 说明 帧开始标记,StartofFrame,非层次哈夫曼编码 SOF0 0xFFC0 基线离散余弦变换 SOF1 0xFFC1 扩展顺序离散余弦变换 SOF2 0xFFC2 递进离散余弦变换 SOF3 0xFFC3 空间顺序无损 帧开始标记,StartofFrame,层次哈夫曼编码 SOF5 0xFFC5 差分离散余弦变换 SOF6 0xFFC6 差分层次离散余弦变换 SOF7 0xFFC7 差分空间无损 帧开始标记,StartofFrame,非层次算术编码 JPEG 0xFFC8 为JPEG扩展保留 SOF9 0xFFC9 扩展顺序离散余弦变换 SOF10 0xFFCA 递进离散余弦变换 SOF11 0xFFCB 空间顺序无损 帧开始标记,StartofFrame,层次算术编码 SOF13 0xFFCD 差分离散余弦变换 SOF14 0xFFCE 差分层次离散余弦变换 SOF15 0xFFCF 差分空间无损 其他标记 DHT 0xFFC4 定义哈夫曼树表 DAC 0xFFCC 定义算术编码表 RST0 OxFFD0 差分编码累计复位,共8个 …… …… RST7 OxFFD7 SOI OxFFD8 图像开始 EOI OxFFD9 图像结束 SOS 0xFFDA 开始扫描,图像数据开始 DQT 0xFFDB 定义量化表 DNL 0xFFDC 定义线数 DRI 0xFFDD 定义差分编码累计复位的间隔 DHP 0xFFDE 定义层次级数 EXP 0xFFDF 展开参考图像 APP0 0xFFE0 为应用程序保留,共15个 …… …… APP15 0xFFEE JPG0 0xFFF0 为JPEG扩展保留,共14个 …… …… JPG13 0xFFFD COM 0xFFFE 注释 TEM 0xFF01 算术编码中作临时之用 RES 0xFF02 保留,共189个 …… …… RES 0xFFBF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JFIF 文件
![提示](https://static.bingdoc.com/images/bang_tan.gif)