exif格式分析.doc

上传人:s9****2 文档编号:555274319 上传时间:2023-01-21 格式:DOC 页数:29 大小:388.50KB
返回 下载 相关 举报
exif格式分析.doc_第1页
第1页 / 共29页
exif格式分析.doc_第2页
第2页 / 共29页
exif格式分析.doc_第3页
第3页 / 共29页
exif格式分析.doc_第4页
第4页 / 共29页
exif格式分析.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《exif格式分析.doc》由会员分享,可在线阅读,更多相关《exif格式分析.doc(29页珍藏版)》请在金锄头文库上搜索。

1、Exif格式分析2010-03-04 17:361133人阅读评论(4)收藏举报大概翻译了一下,非常的粗糙,慢慢修正。请高手自动飘过因为做图像压缩时会损失相机写入的如光圈、快门等信息,所以自己写了个图像压缩小玩意,顺便研究了一下Exif。原文地址:Exif file format JPEG格式和标志JPEG文件都是以十六进制0xFFD8开始,以0xFFD9结束。在JPEG数据中有像0xFF*这样的数据,这些被称为“标志”,它表示JPEG信息数据段。0xFFD8 表示SOI(Start of image 图像开始),0xFFD9表示EOI(End of image 图像结束)。这两个特殊的标志没

2、有附加的数据,而其他的标志在标志后都带有附加的数据。基本的标志格式如下:0xFF + 标志数字(1字节)+ 数据大小(2字节)+ 数据(n字节)数据大小 (2字节) 是大端顺序表示(Motorola方式),从高字节开始。请注意“数据”包含了数据大小的描述,如果一个标志为:FF C1 00 0C则表示标志0xFFC1有0x000C(十进制12)个字节的数据,但是数据的大小12 也包含了记录“数据大小”的字节,所以在0x000C 后面只有10个字节的数据量。在JPEG格式中,一些标志描绘数据后,跟着的就是SOS(Start of stream 数据流开始)标志。在SOS标志之后,就是JPEG图像流

3、,直到EOI标志终结。SOI MarkerMarker XX size=SSSSMarker YY size=TTTTSOS Marker size=UUUUImage streamEOI MarkerFFD8FFXXSSSSDDDD.FFYYTTTTDDDD.FFDAUUUUDDDD.I I I I.FFD9Exif中使用的标志从0xFFE0 0xFFEF 的标志是“应用程序标志”,在解码JPEG 图像的时候不是必需使用的。这些标志被用在用户应用中。例如:老款的Olympus(奥林巴斯)、canon(佳能)、casio(卡西欧)、Agfa(爱克发)的数码相机使用JFIF(JPEG档案交换格式

4、)来存储相片的。JFIF使用APP0(0xFFE0)标志来插入数码相机的配置数据和缩略图的。 Exif也使用应用程序标志来插入数据,但是Exif使用APP1(0xFFE1)标志以避免和JFIF格式冲突。每个Exif文件格式都是从下面格式开始的:SOI MarkerAPP1 MarkerAPP1 DataOther MarkerFFD8FFE1SSSS 457869660000 TTTT.FFXX SSSS DDDD. 从SOI(0xFFD8)标志开始,所以这是一个JPEG文件。后面随即跟着个一个APP1标志。所有的Exif数据都储存在APP1数据区中。在上表中的SSSS 部分表示APP1数据(

5、Exif 数据区域)的大小。请注意其大小SSSS包括大小描述SSSS其本身。 APP1的数据从SSSS后开始。第一部分是特殊数据,使用ASCII字符Exif和两个字节的0x00 ,它定义了是否使用Exif。 APP1标志数据之后,是其他JPEG标志。 Exif数据结构大略的Exif数据结构(APP1)如下。它采用了Intel的小端字节顺序方案,且包含JPEG格式的缩略图。总体上,Exif数据是从ASCII字符Exif和2个字节的0x00开始,后面就是Exif的数据了。Exif使用TIFF格式来存储数据。想知道更多关于TIFF格式内容,请浏览TIFF6.0 specification。 FFE1

6、APP1 MarkerSSSSAPP1 DataAPP1 Data Size45786966 0000Exif Header49492A00 08000000TIFF HeaderXXXX. . . . IFD0 (main image)DirectoryLLLLLLLLLink to IFD1XXXX. . . . Data area of IFD0XXXX. . . . Exif SubIFDDirectory00000000End of LinkXXXX. . . . Data area of Exif SubIFDXXXX. . . . Interoperability IFDDire

7、ctory00000000End of LinkXXXX. . . . Data area of Interoperability IFDXXXX. . . . Makernote IFDDirectory00000000End of LinkXXXX. . . . Data area of Makernote IFDXXXX. . . . IFD1(thumbnail image)Directory00000000End of LinkXXXX. . . . Data area of IFD1FFD8XXXX. . . XXXXFFD9Thumbnail image TIFF头的格式TIFF

8、头指的是TIFF格式的前8个字节。前两个字节定义了TIFF数据采用何种字节顺序。如果是0x4949 = II,表示采用Intel的小端字节顺序,如果为0x4d4d = MM,表示采用Motorola的大端字节顺序。例如:值305,419,896用十六进制表示为0x12345678.在Motorola的大端字节顺序中以0x12,0x34,0x56,0x78的顺序存储。如果采用Intel的小端字节顺序,则以0x78,0x56,0x34,0x12的顺序存储。现在来看,大多数数码相机采用Intel的方式。Ricoh(理光)采用了Motorola的方式。Sony(索尼)除了D700都采用Intel的的字

9、节顺序。Kodak(柯达)DC200/210/240采用Motorola方式,但是DC220/260使用PowerPC却采用了Intel的方式!因此我们在获取Exif数据时,必须每次都确认它的字节顺序。虽然JPEG数据只采用Motorola方式的字节顺序,但Exif却允许采用两种方式。我不明白为什么Exif不修改字节顺序为Motorola方式。 然后的两个字节总是2个字节长度的0x002A。如果数据采用Intel的字节顺序,这两个字节为0x2A,0x00。如果采用Motorola的字节顺序,则为0x00,0x2A。TIFF头的最后4个字节是第一个IFD(Image File Directory

10、, described in next chapter 图像文件目录,描述下一个字符)的偏移量。在TIFF格式中所有的偏移量都是从TIFF头的第一个字节(II或者MM)开始计算的到所在位置的字节数目,这个偏移量也不例外。通常第一个IFD是紧跟在TIFF头后面的,所以它的偏移量为0x00000008。Byte alignTAG MarkOffset to first IFDI I or MM0x002a0x00000008IFD:图像文件目录(Image file directory )接着TIFF头的是第一个IFD。它包含了图像信息数据。在下表中,开始的两个字节(EEEE)表示这个IFD所包含

11、的目录实体数量。然后紧跟着就是实体对象(每个实体12个字节)。在最后一个目录实体后面有一个4字节大小的数据(表中的是LLLLLLLL),它表示下一个IFD的偏移量。如果这个偏移量的值是0x00000000,就表示这个IFD是最后一个IFD。EEEENo. of directory entryTTTTffffNNNNNNNNDDDDDDDDEntry 0TTTTffffNNNNNNNNDDDDDDDDEntry 1. . . . . . . . . . . . . .TTTTffffNNNNNNNNDDDDDDDDEntry EEEE-1LLLLLLLLOffset to next IFD 上表

12、中的TTTT(2字节)是标签号,代表各种数据。ffff(2字节)是数据格式。NNNNNNNN(4字节)是组成元素的数量。DDDDDDDD(4字节) 包含数据本身或者数据的偏移量。数据格式数据格式(上表中的FFFF)如下表所定义的一样。rational表示一个分数,它包含两个signed/unsigned long integer值并且第一个为分子,第二个为分母。Value123456Formatunsigned byteascii stringsunsigned shortunsigned longunsigned rationalsigned byteBytes/component11248

13、1Value789101112Formatundefinedsigned shortsigned longsigned rationalsingle floatdouble floatBytes/component124848 你可以用组成元素的字节数(bytes/components)的值(见上表)乘以储存在NNNNNNNN区域中的组成元素的数量得到数据总长度。如果这个总长度小于4个字节,那么DDDDDDDD中的是这个标签(Tag)的值。如果总长度大于等于4个字节,DDDDDDDD中的是数据存储地址的偏移量。IFD数据结构在Exif格式中,第一个IFD是IFD0(主图像的IFD),它链接着I

14、FD1(缩略图的IFD)后IFD链终止。带式IFD0/IFD1不包含像快门速度,焦距等任何数码相机的信息。IFD0总是包含特殊的标签(Tag)Exif的偏移量(0x8769),它说明道Exif SubIFD(子IFD)的偏移量。Exif SubIFD(子IFD)也是IFD的格式,它包含了数码相机的信息。、 Exif格式的扩展方案(Exif2.1/DCF)中,Exif SubIFD 包含了特殊标签Exif互用偏移量(Exif Interoperability Offset)(0xA005)。它指向互用的IFD(Interoperability IFD)。在DCF(数码相机格式)规范中,这个标签是必须的且子IFD(SubIFD(主图像IFD)和IFD1(缩略图IFD)都可以带使用互用的IFD(Interoperability IFD)。通常,只有主图像使用带有这个标签。 一些数码相机使用IFD数据格式来表示制造商数据制造商特殊的神秘数字区。要小心的编写程序,因为很难区分制造商数据是否使用了IFD格式。附录中有一些制造商数据的信息。 0000: 49 49 2A 00 08 00 00 00-02 00 1A 01 05 00 01 000010: 00 00 26 00 00 00 69

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号