您的位置:首页 > 其它

EXIF格式分析及通过XML处理(2)

2004-05-09 11:09 288 查看
EXIF格式分析及通过XML处理

猛禽[Mental Studio](个人专栏)(BLOG)
http://mental.mentsu.com


起始长度(Bytes)内容
0x002Number of Directory Entries(Count)
0x0212 * CountDirectory Entries
2 + 12 * Count4Offset of next IFD
表4:IFD格式定义

每个IFD由三个部分组成,如表4所示,包括:Number of Directory Entries,Directory Entries和Offset of next IFD。其中Number of Directory Entries指定在Directory Entries中包含多少个Entry。Directory Entries是一个数组,包含若干个Directory Entry。最后的Offset of next IFD即是下个IFD所在的位置,如果此项为0,则表示这是链表中的最后一个IFD。

起始长度(Bytes)内容
0x002Tag
0x022Type
0x044Size
0x084Value
表5:IFD Entry格式定义

IFD Entry是一个12字节长的结构,如表5所示。正如TIFF的名称所说的那样:A tag-based file format for storing and interchanging raster images[2]。所有的IFD Entry都是通过Tag来标识的,每一个Tag都是一个WORD类型的数值,每个数值有其特定的含义。如0x0131这个Tag表示此Entry记录的是生成此TIFF文件的软件名等。具体每个Tag的含义可能查阅TIFF的规范文档[2]。EXIF只用到了其中部分Tag,另外还扩充了三个Tag用于链接EXIF的三个扩充IFD,这些在EXIF的规范文档中有说明[1]。
IFD Entry中的Type是指明此Entry中记录的数据类型,TIFF规范只定义了五种类型,EXIF增加了三种。各类型说明如表6所示:

Type类型SizeValue
1BYTE1字节数据,Size一般为1
如果Size大于4,则Value为其位置
2ASCIIn一个ASCIIZ的字符串,Size为串长度,包括结尾的NULL字符
Size小于等于4则直接存放在Value中
Size大于4,则在Value中指定其位置
3SHORT1无符号短整数,Size一般也为1
如果Size大于2,则Value为其位置
4LONG1无符号长整数,Size一般也是1
5RATIONAL1有理数,TIFF是用分数的形式来表达,用了两个LONG类型的数据,前一个LONG为分子,后一个LONG为分母,Size一般也是1。
因为一个RATIONAL类型包含两个LONG,无法记录在Value中,所以Value中记录的是这个RATIONAL数所在的位置(从TIFF Header开始的偏移)
以上为TIFF定义的类型,以下为EXIF扩展定义类型
7UNDEFINEDn任意的字节数据,根据具体情况定义
Size小于等于4则直接存放在Value中
Size大于4,则在Value中指定其位置
9SLONG1有符号长整数,与LONG类似,以2的补码形式表示
10SRATIONAL1有符号有理数,与RATIONAL类似,不过是用两个SLONG来表示
表6:Type定义

关于Value的内容有一点要注意的是,它可能是数据本身,也可能是数据存放位置的偏移,这取决于Type和Size的大小。数据存放位置都是从TIFF Header开始计算的偏移量。
有一点要注意的是:EXIF的三个扩充IFD Tag也是LONG类型,它记录的是相应IFD的起始位置(从TIFF Header开始的偏移)。在扩充IFD中用到的Tag全部是EXIF重新定义的。
(待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: