您的位置:首页 > 其它

JFIF图片

2013-10-21 16:19 281 查看
概述
图片存储格式之一,由JPEG格式衍生而来,后缀为".jfif"。JPEG本身只有描述如何将一个图像转换为字节的数据串流(streaming),但并没有说明这些字节如何在任何特定的储存媒体上被封存起来。一个由独立JPEG小组(Independent JPEG Group)所建立的额外标准,称为JFIF(JPEG File Interchange Format,JPEG档案交换格式),详细说明如何从一个JPEG串流,产出一个适合于电脑储存和传输(像是在因特网上)的档案。当有人称呼一个"JPEG档案",一般而言他是意指一个JFIF档案,或有时候是一个Exif JPEG档案。然而,也有其他以JPEG为基础的档案格式,像是JNG。JPEG/JFIF是最普遍在万维网(World Wide Web)上被用来储存和传输图片的格式。它并不适合于线条绘图(drawing)和其他文字或图示(iconic)的图形,因为它的压缩方法用在这些图形的型态上,会得到不适当的结果(PNGGIF格式通常是用来针对这种目的之图形;GIF每一像素只有8位元,并不很适合于用在彩色照片,PNG可以被用来无失真地储存照片,但是档案太大让它不适合在网页上放照片)。对于JFIF的MIME媒体型态是image/jpeg(定义在RFC 1341)。

2简介

微处理机中的数据存放顺序有大端(big endian)小端(little endian)[1]之分。大端顺序是指高字节数据存放在低地址处,低字节数据存放在高地址处,而小端顺序是指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处。例如,十六进制数为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文件交换格式。JPEG文件使用的颜色空间是YCbCr空间。在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。

3文件结构

JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:SOI 0xD8  图像开始APP0 0xE0  JFIF应用数据块APPn 0xE1 - 0xEF  其他的应用数据块(n, 1~15)DQT 0xDB  量化表SOF0 0xC0  开始DHT 0xC4  霍夫曼(Huffman)表SOS 0xDA  扫描线开始EOI 0xD9  图像结束一般的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④ X和Y的密度单位(units=0:无单位;units=1:点数/英寸;units=2:点数/厘米)bh 1字节只有0,1,2三个值可选,其分别代表的意义如上]⑤ 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)① APPn长度(length)(①②两个字段的总长度)② 详细信息(application specific information)对每个APP:若为APPN(N=1~F(以16进制表示,N任选其中一个))· 标记: mh 2字节 0xFFEN· 长度:(m+2)h 2字节内容不定(设为n(10进制))(本字段与下一字段的总长度)· 详细信息: (m+4)h n-2字节(即长度减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 bit;ID取值范围为0~3, 否则错误· 表项 (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. IDB. 垂直方向的样本因子(vertical sample factor)C. 水平方向的样本因子(horizontal sample factor) B、C共占用1字节,B占用低4位,C占用高4位)D. 量化表号(quantization table#)JFIF格式使用的是YCbCr所以有3个分量(这里特别要注意的是颜色分量的ID号是有含义的,1代表Y,2代表Cb,3代表Cr,4代表I,5代表Q):1) IDah 1字节 0x01(高四位)水平(低四位)垂直样本因子bh 共1字节 0x227量化表号ch 1字节内容不定(本分量使用的量化表的ID号)2) IDdh 1字节 0x02(高四位)水平(低四位)垂直样本因子eh 共1字节 0x11J量化表号fh 1字节内容不定(本分量使用的量化表的ID号)3) ID10h 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(其中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)h 16字节内容不定(设这16个字节上数据之和为n)· 内容编码: (m+17)h n字节内容长,故略)(7) 定义重新开始间隔DRI(Define Restart Interval)(在没有DRI标记,或间隔为零时,就不存在重新开始间隔和重开始标记)0h 2字节 0xFFDD① 长度 2h 2字节 0x0004(①~②两个字段的总长度)② MCU 块的单元中的重新开始间隔4h 2字节内容不定(设为n,则意思是说,每n个MCU块就有一个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. IDB. 交流系数表号(AC table #)C. 直流系数表号(DC table #)(B、C共占用1字节,B:占用低4位,C:占用高4位)由②得到这里的颜色分量数为3(这里的颜色分量的ID号的含义和⑸⑥的一样,1代表Y,2代表Cb,3代表Cr,4代表I,5代表Q):1) ID5h 1字节 0x01 (高四位)直流(低四位)交流数表号6h 共1字节 0x002) ID7h 1字节 0x027 (高四位)直流(低四位)交流数表号8h 共1字节 0x113) ID9h 1字节 0x03 (高四位)直流(低四位)交流数表号ah 共1字节 0x11④ 压缩图像数据(compressed image data)A. 谱选择开始 bh 1字节 0x00B. 谱选择结束 ch 1字节 0x3FC. 两个4位字段,高位和低位的谱选择 dh 1字节在基本JPEG中总为0x00D. 数据 eh 长度不定内容长,故略(9) 图像结束EOI(End of Image)0h 2字节 0xFFD9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图片 文章 JFIF