TIF 图一般由三个部分组成: 文件头(简称 IFH), 文件目录(简称 IFD), 图像数据.
一, 图像文件头(Image File Header)
IFH 数据结构包含 3 个成员共计 8 个字节(见表一):
表一 IFH 结构描述
------------------------------------------------------------
名称 字节数 数据类型 说明
------------------------------------------------------------
Byteorder 2 Integer TIF 标记, 其值为 4D4D 或 4949
Version 2 Integer 版本号, 其值恒为 2A00
Offset to first IFD 4 Long 第一个 IFD 的偏移量
------------------------------------------------------------
表一说明
1.Byteorder: 可能是 H4D4D 或 H4949,H4D4D 表示该图是摩托罗拉整数格式, H4949 表示该图是 Intel 整数格式.
2.Version: 总是 H2A00, 它可能是 tif 文件的版本, 也可能用于进一步校验该文件是否为 TIF 格式.
3.Offset to first IFD: 第一个 IFD 相对文件开始处的偏移量(因为可能会有多个顺序排列的 IFD).
IFD 数据结构并不一定紧跟在 IFH 后面, 相反, 它常常位于第三部分图像数据的后面, 即 TIF 图像文件的一般组织形式是: IFH-- 图像数据 --IFD.
二, 图像文件目录(Image File Directory)
IFD 是 TIF 图像文件中重要的数据结构, 它包含了三个成员. 由于一个 TIF 文件中可以有多个图像, 而一个 IFD 只标识一个图像的所有属性(有的文章把 "属性" 称之为 "标签"), 所以, 一个 TIF 文件中有几个图像, 就会有几个 IFD.IFD 的结构见表二:
表二 IFD 结构描述
-----------------------------------------------------------------
名称 字节数 数据类型 说明
-----------------------------------------------------------------
Directory Entry Count 2 Integer 本 IFD 中 DE 的数量
Directory Entry(1) 12 简称 DE, 中文译义 "目录项"
- Directory Entry(2) 12
- ......
- Directory Entry(N) 12
Offset to next IFD 4 Long 下一个 IFD 的偏移量
-----------------------------------------------------------------
表二说明
1.Directory Entry Count: 指出在该 IFD 中 DE 的个数;
2.Directory Entry: 共 12 个字节, 结构见表三. 需要指出的是, DE 的个数是不定的, 因为每个 DE 只标识了图像的一个属性, 那么这幅图像有 N 个属性就会有 N 个 DE, 用户甚至可添加自定义的标记属性, 这就是为什么称 TIF 格式文件为 "可扩充标记的文件" 的原因.
3.Offset to next IFD Or NULL: 下一个 IFD 相对于文件开始处的位置, 这是一个链式构成. 如果该数字为 0, 表示已经是最后一个 IFD. 当然, 如果该 TIF 文件只包含了一幅图像, 那么就只有一个 IFD, 显然这个偏移量也会等于 0.
表三 DE 结构描述
--------------------------------------------------
名称 字节数 数据类型 说明
--------------------------------------------------
tag 2 Integer 本属性的标签编号
type 2 Integer 本属性值的数据类型
length 4 Long 该类型数据的数量
valueOffset 4 Long 属性值的存放偏移量
--------------------------------------------------
表三说明
由 DE 标识的图像属性有: 图像的大小, 分辨率, 是否压缩, 像素的行列数, 颜色深度 (单色, 16 色, 256 色, 真彩色) 等等. 其中:
1tag: 是该属性的标签编号 (TagID), 在图像文件目录中, 它是按照升序排列的(但不一定是连续的). 这些编号在 TIF 格式官方白皮书中可以查到相应的含义, 但遗憾的是, 我们到哪儿可以找到官方白皮书呢? 所以, 笔者只能把网上能找得到资料(再结合自己的实验结果) 罗列出来, 见表四.
2type: 表示该属性数据的类型, 一般认为 TIF 官方指定的有 5 种数据类型(但也有说 12 种数据类型的). 见表五.
3length: 该种类型的数据的个数, 而不是某个数据的长度.
4valueOffset: 是 tagID 代表的变量值相对文件开始处的偏移量, 但如果变量值占用的空间不多于 4 个字节(例如只有 1 个 Integer 类型的值), 那么该值就直接存放在 valueOffset 中, 没必要再另外指向一个地方了.
表四 DE 中标签编号的含义
-------------------------------------------------------------------------
TagID 属性名称 type 说明
-------------------------------------------------------------------------
0100 图像宽 0003
0101 图像高 0003
0102 颜色深度 0003 值 = 1 为单色,=4 为 16 色,=8 为 256 色.
如果该类型数据个数>2 个, 说明是真彩图像
0103 图像数据是否压缩 0003 值 = 05 表示压缩
0106 图像是否采用反色显示 0003 值 = 01 表示反色, 否则表示不反色
0111 图像扫描线偏移量 0004 图像数据起始字节相对于文件开始处的位置
0116 图像扫描线的数量 0004 表示图像有几行扫描线, 实际上等于图像高度
0117 图像数据字节总数 0003 如果不是偶数, 那么实际存放时会在后面加 0
011A 水平分辩率偏移量 0005 常用计量单位是: 像素 / 英寸
011B 垂直分辩率 偏移量 0005 常用计量单位是: 像素 / 英寸
0131 生成该图像的软件名 0002 文本类型
0132 生成该图像的时间 0002 文本类型
0140 调色板偏移量 0003 256 色和 16 色图像才有此属性, 而且有连续 2 个
调色板, 但属性的 length 值只表示出 1 个调色板
-------------------------------------------------------------------------
表四说明
1"水平 (垂直) 分辩率" 是分数型的属性, 其值要占用 8 个字节, 所以在 valueOffset 中存放的肯定是它的具体数值的偏移量, 而不是数值本身.
2"生成图像的软件名称" 和 "生成图像的时间" 这两个字符型属性, 它们的值所占用的空间也会大于 4 字节, 所以在 valueOffset 中存放的也是它们的值的偏移量, 而不是值本身.
3"图像数据字节总数" 一般是个偶数, 如果是奇数, 那么实际存放时会在后面加一个 0, 但这个 0 不会计算在字节总数之内.
表五 DE 中的数据类型
--------------------------------------------------------------------
type 值 数据类型 说明
- --------------------------------------------------------------------
- 0001 Byte
0002 Ascii 文本类型, 7 位 Ascii 码加 1 位二进制 0
- 0003 Integer
- 0004 Long
0005 RATIONAL 分数类型, 由两个 Long 组成, 第 1 个是分子, 第 2 个是分母
--------------------------------------------------------------------
三, 图像数据. 这些数据可能是压缩的, 也可能是未压缩的. 如果经过压缩, 那么压缩算法又有许多种, 所以, 图像数据是 TIF 文件中最为复杂的部分, 暂还没有哪个软件能译出所有的压缩算法.
来源: http://www.bubuko.com/infodetail-2862612.html