文件交换格式版本1.021992年9月1日埃里克·汉密尔顿C-Cube微系统麦卡锡大道1778号。加利福尼亚州Milpitas,邮编:95035+1 408 944-6300传真:+1 408 944-6314电子邮件:eric@c3.pla.ca.us文件交换格式版本1.02为什么选择文件交换格式JPEG文件交换格式是一种最小的文件格式,它使JPEG比特流能够在各种平台和应用程序之间进行交换。此最小格式不包括TIFF JPEG规范中的任何高级功能或特定于应用程序的文件格式。也不应该仅为了简化格式是允许交换JPEG压缩图像。JPEG文件交换格式功能o使用JPEG压缩o使用JPEG交换格式压缩图像表示o兼容PC或Mac或Unix工作站o标准颜色空间:一个或三个分量。对于三种成分,YCbCr(CCIR 601-256级)o APP0标记用于指定单位、X像素密度、Y像素密度、缩略图o APP0标记还用于指定JFIF扩展o APP0标记还用于指定特定于应用程序的信息JPEG压缩尽管JPEG文件交换格式的语法支持任何JPEG处理(JFIF)强烈建议将JPEG基线处理用于以下目的文件交换的。这确保了与所有支持JPEG格式。JFIF符合JPEG国际标准草案(ISO DIS 10918-1)。JPEG文件交换格式与标准JPEG完全兼容交换格式;唯一的附加要求是APP0标记位于SOI标记之后。注意,JPEG交换格式要求(如JFIF)编码过程中使用的所有表规范是否都在比特流使用之前。跨平台兼容JPEG文件交换格式跨平台兼容:例如,它不兼容使用Macintosh支持但PC或工作站不支持的任何资源分支。标准颜色空间要使用的颜色空间是CCIR 601定义的YCbCr(256级)。RGB(RGB)通过YCbCr线性转换计算的成分不得进行伽马校正(伽马=1.0)。如果只使用一个组件,则该组件应为Y。用于识别JPEG FIF的APP0标记APP0标记用于识别JPEG FIF文件。JPEG FIF APP0标记为SOI标记后的强制标记。JFIF APP0标记由以零结尾的字符串“JFIF”标识。APP0可以是应用程序用于任何其他目的,前提是它可以与JFIF附录。JFIF APP0标记提供JPEG流中缺少的信息:版本号、X和Y像素密度(每英寸点数或每厘米点数)、像素纵横比(源自X和Y像素密度),缩略图。用于指定JFIF扩展的APP0标记可以选择使用其他APP0标记段来指定JFIF扩展。如果使用时,这些段必须紧跟JFIF APP0标记。解码器应跳过任何不支持的JFIF扩展段并继续解码。JFIF扩展APP0标记由一个以零结尾的字符串“JFXX”标识。这个JFIF扩展名APP0标记段包含标识扩展名的1字节代码。此版本(1.02版)只定义了一个扩展:用于定义以24位RGB以外的格式存储的缩略图。APP0标记用于特定于应用程序的信息其他APP0标记段可用于保存特定于应用程序的信息这不会影响JFIF文件的可解码性或可显示性。应用程序-特定的APP0标记段必须出现在JFIF APP0和任何JFXX APP0之后部分。解码器应跳过任何无法识别的特定于应用程序的APP0段。特定于应用程序的APP0标记段由以零结尾的字符串标识标识应用程序(不是“JFIF”或“JFXX”)。此字符串应为组织名称或公司商标。通用字符串,如dog、cat、tree等。不应使用。RGB之间的转换Y、 Cb和Cr由CCIR建议601中定义的R、G和B转换而来但被规范化,以占据8位二进制编码的全部256个级别。更多准确地说:Y=256*E'YCb=256*[E'Cb]+128Cr=256*[E'Cr]+128其中E'y、E'Cb和E'Cb-的定义见CCIR 601。因为E'y的值有一个范围为0到1.0,E'Cb和E'Cr的范围为-0.5到+0.5,Y、Cb和Cr当它们是最大值时,必须限制为255。RGB到YCbCr的转换YCbCr(256级)可以直接从8位RGB计算,如下所示:Y=0.299 R+0.587 G+0.114 BCb=-0.1687 R-0.3313 G+0.5 B+128铬=0.5 R-0.4187 G-0.0813 B+128注-并非所有图像文件格式都按R0、G0、,B0。。。Rn、Gn、Bn。在转换RGB文件到JFIF。YCbCr到RGB的转换RGB可以直接从YCbCr(256级)计算,如下所示:R=Y+1.402(铬-128)G=Y-0.34414(Cb-128)-0.71414(Cr-128)B=Y+1.772(Cb-128)图像方向在JFIF文件中,图像方向始终是自上而下的。这意味着第一个图像JFIF文件中编码的样本位于图像的左上角编码从左到右,从上到下进行。自上而下的方向用于全分辨率图像和缩略图图像。将具有自下而上方向的图像文件转换为JFIF的过程必须包括在JPEG编码之前反转所有图像行的顺序组件的空间关系组件内像素样本相对于其他组件的样本对于正确的图像后处理和精确性是必要的图像演示。在JFIF文件中,子采样组件中像素的位置为相对于最高分辨率分量定义。因为组件必须正交采样(沿行和列),采样在给定的子采样分量可以通过指定水平和垂直第一个样本(即左上角的样本)相对于最高分辨率组件。子采样组件中第一个样本的水平和垂直偏移,Xoffseti[0,0]和Yoffseti[0,0]定义为Xoffseti[0,0]=(Nsamplesref/Nsamplesi)/2-0.5Yoffseti[0,0]=(Nlinesref/Nlinesi)/2-0.5哪里Nsamplesref是最大组件中每行的样本数,Nsamplesi是第i个分量中每行的样本数,Nlinesref是最大组件中的行数,Nlinesi是第i个组件中的行数。组件的适当子采样包含一个抗混叠滤波器,可减少全分辨率组件的光谱带宽。子采样可以很容易地使用具有偶数抽头(系数)的对称数字滤波器完成。2:1次采样的常用滤波器使用两个抽头(1/2,1/2)。注-此定义与Poscript等行业标准兼容级别2和QuickTime。这个定义与惯例不兼容由CCIR建议601-1和其他数字视频格式使用。对于这些格式,色度分量的预处理在压缩以确保压缩图像的准确重建。JPEG文件交换格式规范JFIF文件的语法符合附录B中定义的交换格式的语法ISO DIS 10918-1标准。此外,JFIF文件使用APP0标记段和约束帧标题中的某些参数定义如下。X'FF'、SOIX'FF',APP0,长度,标识符,版本,单位,X密度,Y密度,X缩略图,Y缩略图,(RGB)n长度(2字节)APP0字段字节总数,包括字节计数值(2个字节),但不包括APP0标记器本身标识符(5个字节)=X'4A',X'46',X'49',X's 46',X'00'此以零结尾的字符串(“JFIF”)唯一标识此APP0标记。该管柱应具有零奇偶校验(位7=0)。版本(2个字节)=X'0102'最高有效字节用于major修订,次要的最低有效字节修订。版本1.02是当前发布的修订。单位(1字节)X和Y密度的单位。units=0:无单位,X和Y指定像素纵横比单位=1:X和Y为每英寸点数单位=2:X和Y是每厘米点数Xdensity(2字节)水平像素密度Y密度(2字节)垂直像素密度缩略图(1字节)缩略图水平像素计数Y缩略图(1字节)缩略图垂直像素计数(RGB)n(3n字节)缩略图的压缩(24位)RGB值像素,n=X缩略图*Y缩略图[可选JFIF扩展APP0标记段-见下文]o个o个o个X'FF'、SOFn、长度、帧参数组件数量Nf=1或3第一分量C1=1=Y分量第二分量C2=2=Cb分量第三组分C3=3=Cr组分o个o个o个X'FF',EOIJFIF扩展APP0标记段紧跟在JFIF APP0标记段之后的可能是JFIF扩展APP0标记。此JFIF扩展APP0标记段只能用于JFIF版本1.02及以上。JFIF扩展APP0标记段的语法为:X'FF',APP0,长度,标识符,扩展代码,扩展数据长度(2字节)APP0字段字节总数,包括字节计数值(2个字节),但不包括APP0标记器本身标识符(5个字节)=X'4A',X'46',X'58',X's 58',X'00'这个以零结尾的字符串(“JFXX”)是唯一的标识此APP0标记。该管柱应具有零奇偶校验(位7=0)。extension_code(1字节)=标识扩展的代码。在这个版本,定义了以下扩展:=X'10'使用JPEG编码的缩略图=X'11'使用1字节/像素存储的缩略图=X'13'使用3字节/像素存储的缩略图extension_data(variable)=JFIF其余部分的规范扩展APP0标记段随扩展。有关的规范,请参见下文每个扩展的extension_data。JFIF扩展:使用JPEG编码的缩略图此扩展支持使用JPEG压缩的缩略图。压缩的缩略图紧跟extension_data字段中的extension_code(X'10')和长度的压缩数据必须包含在JFIF扩展APP0标记长度字段中。extension_data字段的语法符合定义的交换格式的语法ISO DIS 10918-1附录B。然而,“JFIF”或“JFXX”标记段不得出席。与JFIF文件的全分辨率图像一样,extension_data的语法约束帧标头中的参数,如下所定义:X'FF'、SOIo个o个o个X'FF'、SOFn、长度、帧参数组件数量Nf=1或3第一分量C1=1=Y分量第二分量C2=2=Cb分量第三组分C3=3=Cr组分o个o个o个X'FF',EOIJFIF扩展:使用每像素一个字节存储缩略图此扩展支持使用每个像素一个字节和中的调色板存储缩略图extensiondata字段。extension_data的语法为:缩略图(1字节)缩略图水平像素计数Y缩略图(1字节)缩略图垂直像素计数调色板(768字节)调色板的24位RGB像素值。RGB值定义由8位二进制编码的每个值(0-255)。缩略图像素的(像素)n(n字节)8位值n=X缩略图*Y缩略图JFIF扩展:使用每像素三个字节存储缩略图此扩展支持使用extension_data中每个像素三个字节存储的缩略图字段。extension_data的语法为:缩略图(1字节)缩略图水平像素计数Y缩略图(1字节)缩略图垂直像素计数(RGB)n(3n字节)缩略图的压缩(24位)RGB值像素,n=X缩略图*Y缩略图有用的提示o您可以通过查找以下序列来识别JFIF文件:X'FF'、SOI、X'FF、,APP0,<2个字节可跳过>,“JFIF”,X'00'。o如果在其他地方使用APP0,请确保后面没有字符串“JFIF”或“JFXX”APP0标记。o如果不想包含缩略图,只需编程Xthumbul=Ythumbuil=0。o确保检查特殊APP0字段中的版本号。一般来说,如果专业JFIF文件的版本号与解码器支持的版本号匹配,则该文件为可解码。o如果只想指定像素纵横比,请在特殊的“单位”字段中输入0APP0字段。然后可以针对所需的纵横比对Xdensity和Ydensity进行编程。Xdensity=1,Ydensity=1将编程为1:1的纵横比。X密度和Y密度应始终为非零。