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

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位真彩色的图像。

  • 12
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值