TIFF(Tag Image File Format)是一种包含标签(Tags)的静态图像文件。它的文件由文件头、1个以上的IFD(Image File Directory)及IFD指向的数据块组成。
一、文件头(Header)
文件头通常为8个字节(big TIFF另说),具体如下:
0-1字节;49 49或4D 4D;即II或MM,代表多字节数据存储方式。II=littlele-endian,MM=Big endian。
2-3字节;2A 00 或2B 00;即42或43,代表版本号。42=普通版本,43=big TIFF版本(只讨论42普通版本)。
4-7字节;任意数;代表第一个IFD的偏移地址。有的是08 00 00 00,即IFD紧接其后。
二、IFD的结构
IFD由Tag数量(n)、n个Tags信息块和下一个IFD偏移地址构成。
1.Tag数量
Tags数量为0-1字节;
2.信息块
每个Tag信息块12个字节,共12*n个字节;
0-1字节;Tag标签代码,从0X100开始,到0xFFFF,有基本的Tag,也可自行扩展。
2-3字节;信息保存的数据的类型,值为1-12,表示每个数据的需要字节数。
4-7字节;Tag信息的数据个数;
8-11字节;tag信息的值或保存值的偏移地址;因8-12共四个字节,如果数据个数(4-7字节)*每个数据需要的字节数(2-3字节)>4,8-11字节不能存储完Tag的值,就存储其值的偏移地址,如
Tag代码 | 数据类型 | 数据个数 | 值或地址 |
0102 | 0003 | 00000004 | 000316A6 |
BitsPerSample(构成颜色的各要素的bit数) | Short(2bytes) | 4 | 偏移地址03 16 A6 |
3.下一个IFD偏移地址
共4个字节。
三、数据块
数据块包括Tag信息值数据块和图像数据信息块。这两种数据块的地址以及数据类型都在IFD规定。
如上面的BitsPerSample信息。
数据块地址和长度在IFD由111,117定义,如下示例。
Tag代码 | 数据类型 | 数据个数 | 值或地址 |
111(图像数据偏移地址) | 0003 | 00000001 | 00000008 |
117(图像数据字节数) | 0004 | 00000001 | 00031620 |
数据块结构以后再详解。