您当前的位置:首页 > 计算机 > 文件格式与编码

【文件格式-TIFF】TIFF图像格式结构

时间:02-25来源:作者:点击数:

1、 TIF 图像格式概览

tif格式标签(tag)查看工具:AsTiffTagViewer

TIF 图由四个部分组成:

1.1、图像文件头(Image File Header 简称 IFH)

图一、IFH 结构描述

IFH 数据结构包含3个成员共计 8 个字节, Byte order 成员可能是“MM”(0x4d4d)或“II”(0x4949), 0x4d4d 表示该 TIFF 图是摩托罗拉整数格式0x4949 表示该图是 Intel 整数格式; Version 成员总是包含十进制 42(0x2a), 它用于进一步校验该文件是否为 TIF 格式, 42 这个数并不是一般人 想象中的那样认为是 tif 软件的版本, 实际上, 42 这个数大概永远不会变化; 第三个成员是 IFD(接下来要说的第二个数据结构)相对文件开始 处的偏移量。

表一 、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。

1.2、图像文件目录(Image File Directory 简称 IFD)

图二 、IFD 及 DE 结构描述

表二、IFD结构描述

名称 字节数 数据类型 说明
Directory Entry Count 2 Integer 本IFD中DE的数量
Directory Entry(1) 12 DE 简称DE,中文译义“目录项”
Directory Entry(2) 12 DE 简称DE,中文译义“目录项”
…… 12 DE 简称DE,中文译义“目录项”
Directory Entry(N) 12 DE 简称DE,中文译义“目录项”
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。

IFD是TIF图中最重要的数据结构,它包含了一个 TIF文件中最重要的信息,一个 TIF 图可能有多个 IFD, 这说明文件中有多个图像, 每个 IFD 标识 1 个图像的基本属性。IFD结构中包含了三类成员,DirectoryEntry Count 指出该结构里面有多少个目录入口;接下来就是 N 个线性排列的DE序列, 数量不定( 这就是 为什么称TIF格式文件为可扩充标记的文件,甚至用户可以添加自定义的标记属性),每个DE标识了图像的某一个属性;最后就是一个偏移量,标识下一个文件目录相对于文件开始处的位置,当然, 如果该 TIF 文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于 0;

1.3、目录项(Directory Entry 简称 DE)

表三 DE结构描述

名称 字节数 数据类型 说明
tag 2 Integer 本属性的标签编号
type 2 Integer 本属性值的数据类型
length 4 Long 该类型数据的数量
valueOffset 4 Long 属性值的存放偏移量

由DE标识的图像属性有:图像的大小、分辨率、是否压缩、像素的行列数、颜色深度(单色、16色、256色、真彩色)等等。其中:

1、tag:是该属性的标签编号(TagID),在图像文件目录中,它是按照升序排列的(但不一定是连续的)。这些编号在TIF格式官方白皮书中可以查到相应的含义,但遗憾的是,我们到哪儿可以找到官方白皮书呢?所以,笔者只能把网上能找得到资料(再结合自己的实验结果)罗列出来,见表四。

2、type:表示该属性数据的类型,一般认为TIF官方指定的有5种数据类型(但也有说12种数据类型的)。见表五。

3、length:该种类型的数据的个数,而不是某个数据的长度。

4、valueOffset:是tagID代表的变量值相对文件开始处的偏移量,但如果变量值占用的空间不多于4个字节(例如只有1个Integer类型的值),那么该值就直接存放在valueOffset中,没必要再另外指向一个地方了。

表四 DE中标签编号的含义

TagID 属性名称 type 说明
0x0100 图像宽 0003  
0x0101 图像高 0003  
0x0102 颜色深度 0003 值=1为单色,=4为16色,=8为256色。如果该类型数据个数>2个,说明是真彩图像
0x0103 图像数据是否压缩 0003 值=05表示压缩
0x0106 图像是否采用反色显示 0003 值=01表示反色,否则表示不反色
0x0111 图像扫描线偏移量 0004 图像数据起始字节相对于文件开始处的位置
0x0116 图像扫描线的数量 0004 表示图像有几行扫描线,实际上等于图像高度
0x0117 图像数据字节总数 0003 如果不是偶数,那么实际存放时会在后面加0
0x011A 水平分辩率偏移量 0005 常用计量单位是:像素/英寸
0x011B 垂直分辩率偏移量 0005 常用计量单位是:像素/英寸
0x0131 生成该图像的软件名 0002 文本类型
0x0132 生成该图像的时间 0002 文本类型
0x0140 调色板偏移量 0003 256色和16色图像才有此属性,而且有连续2个调色板,但属性的length值只表示出1个调色板

1、“水平(垂直)分辩率”是分数型的属性,其值要占用8个字节,所以在valueOffset中存放的肯定是它的具体数值的偏移量,而不是数值本身。

2、“生成图像的软件名称”和“生成图像的时间”这两个字符型属性,它们的值所占用的空间也会大于4字节,所以在valueOffset中存放的也是它们的值的偏移量,而不是值本身。

3、“图像数据字节总数”一般是个偶数,如果是奇数,那么实际存放时会在后面加一个0,但这个0不会计算在字节总数之内。

表五 DE中的数据类型

type值 数据类型 说明
0001 Byte 8 位无标记整数
0002 Ascii 文本类型,7位Ascii码加1位二进制0
0003 Integer 16 位无标记整数
0004 Long 32 位无标记整数
0005 RATIONAL 分数类型,由两个Long组成,第1个是分子,第2个是分母
Tiff 6.0
0006 SBYTE 一个8位有符号(二进制补码)整数
0007 UNDEFINED 一个8位字节,可能包含任何内容,具体取决于字段的定义。
0008 SSHORT 一个16位(2字节)有符号(二进制补码)整数。
0009 SLONG 一个32位(4字节)有符号(二进制补码)整数。
000A SRATIONAL 两个SLONG的:第一个代表a的分子分数,第二个分母
000B FLOAT 单精度(4字节)IEEE格式。
000C DOUBLE 双精度(8字节)IEEE格式。

2、解读Tif 实例

用系统自带的画图程序新建一个17*15的白色图像,另存为TIF文件,它的全部数据如下图:

绿色、粉色、青色表示:IFH

亮黄色背景:数据

橙色字:水平分辩率值

绿色字:垂直分辩率值。

浅蓝色字:颜色深度字

灰色背景:IFD个数0F 00= 15

表六为剩下的15个文件目录的解释和翻译

表六 、一个Tif文件实例的DE描述

顺号 tag type length valueOffset
1 FE 00
0x 00FE
未知属性值
04 00
0x 0004
Long
01 00 00 00
0x 00000001
1
00 00 00 00
0x 00000000
0
2 00 01
0x 0100
图像宽
03 00
0x 0003
Integer
01 00 00 00
0x 00000001
1
11 00 00 00
0x 00000011
17像素
3 01 01
0x 0101
图像高度
03 00
0x 0003
Integer
01 00 00 00
0x 00000001
1
0F 00 00 00
0x 0000000F
15像素
4 02 01
0x 0102
颜色深度
03 00
0x 0003
Integer
03 00 00 00
0x 00000003
数据个数为3(真彩色)
48 00 00 00
0x 00000048
存放起始地址 0x 48
5 03 01
0x 0103
数据压缩形式
03 00
0x 0003
Integer
01 00 00 00
0x 00000001
1
05 00 00 00
0x 00000005
5 为数据是压缩的
6 06 01
0x 0106
是否反色显示
03 00
0x 0003
Integer
01 00 00 00
0x 00000001
1
02 00 00 00
0x 00000002
2为不反色显示
7 11 01
0x 0111
数据起始字节
04 00
0x 0004
Long
01 00 00 00
0x 00000001
1
08 00 00 00
0x 00000008
8字节
8 15 01
0x 0115
未知
03 00
0x 0003
Integer
01 00 00 00
0x 00000001
1
03 00 00 00
0x 00000003
3
9 16 01
0x 0116
图像扫描线
04 00
0x 0004
Long
01 00 00 00
0x 00000001
1
0F 00 00 00
0000000F
15行
10 17 01
0x 0117
压缩数据个数
04 00
0x 0004
Long
01 00 00 00
0x 00000001
1
2F 00 00 00
0x 0000002F
47字节
11 1A 01
0x 011A
水平分辩率
05 00
0x 0005
RATIONAL
01 00 00 00
0x 00000001
1
38 00 00 00
0x 00000038
存放起始地址 0x38
12 1B 01
0x011B
垂直分辩率
05 00
0x 0005
RATIONAL
01 00 00 00
0x 00000001
1
40 00 00 00
0x 00000040
存放起始地址 0x 40
13 1C 01
0x011C
未知
03 00
0x 0003
Integer
01 00 00 00
00000001
1
01 00 00 00
00000001
1
14 28 01
0x0128
未知
03 00
0x 0003
Integer
01 00 00 00
00000001
1
02 00 00 00
00000002
2
15 3D 01
0x013D
未知
03 00
0x 0003
Integer
01 00 00 00
00000001
1
01 00 00 00
00000001
1

1、水平分辩率值存放在0038-003F,占用8个字节,这8个字节是:60 00 0000 01 00 00 00。由于它是分数类型,前4个字节是分子,其值为60000000,转换为10进制就是96,后4个字节是分母,其值是10000000,转换为10进制就是1,所以,分数值是:96/1,它表示每英寸96像素。

2、垂直水平分辩率值存放在0040-0047,请参照1进行分析。

3、颜色深度属性,它有3个Integer类型的值,共计6字节,所以valueOffset中存放的也是其值的偏移量。它的属性值存放在0048-004D,3个整形数据值都为8,表示这是一幅24位真彩色的图像。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门