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

TIFF图像文件格式解析

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

TIFF 6.0 Specification下载链接

1TIFF文件格式概述

TIFF是Tagged Image File Format的缩写。作为一种标记语言,TIFF与其他文件格式最大的不同在于除了图像数据,它还可以记录很多图像的其他信息。 理论上来说, 任何其他的图像格式都能为TIFF所用, 嵌入到TIFF里面。比如JPEG, Lossless JPEG, JPEG2000和任意数据宽度的原始无压缩数据都可以方便的嵌入到TIFF中去。在存储真彩色图像时和BMP格式一样,直接存储RGB三原色的浓度值而不使用彩色映射(调色板)。

TIF的全面性也产生了不少问题,它的包罗万象造成结构较为复杂,变体很多,兼容性较差,它需要大量的编程工作来全面译码。例如,TIF图像数据可以用几种不同的方法压缩,用一个程序来读出所有的TIF几乎是不可能的。

2 TIFF格式解析

TIFF文件由三部分组成:

  1. 图像文件头Image File Header(IFH)
  2. 图像文件目录Image File Directory(IFD)(其中包含了目录项Directory Entry(DE))
  3. 图像数据

2.1 图像文件头(Image File Header,IFH)

IFH 数据结构包含3个成员共计 8 个字节。

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

简单了解:摩托罗拉整数格式,Intel 整数格式的区别

‘MM’高位在前,'II’低位在前

2.2 图像文件目录(Image File Directory,IFD)

一个TIFF文件中至少有1个IFD,一个IFD里至少有一个DE.

在这里插入图片描述

IFD是TIF图中最重要的数据结构,它包含了一个 TIF文件中最重要的信息。

一个 TIF 图可能有多个 IFD, 这说明文件中有多个图像, 每个 IFD 标识 1 个图像的基本属性。

IFD结构中包含了三类成员,DirectoryEntry Count 指出该结构里面有多少个目录入口;接下来就是 N 个线性排列的DE序列, 数量不定,每个DE标识了图像的某一个属性;最后就是一个偏移量,标识下一个文件目录相对于文件开始处的位置,当然, 如果该 TIF 文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于 0;

名称 字节数 数据类型 说明
Directory Entry Count 2 int 本IFD中DE(Directory Entry,目录项)的数量
Directory Entry(1) 12 DE(DE结构图中已画出) 每个DE标识了图像的一个属性
Directory Entry(2) 12    
     
Directory Entry(n) 12    
Offset to next IFD 4 long 下一个IFD的偏移量

我们可以看到,这种IFD中有一种自建的数据结构DE(见右边的表)。需要指出的是,DE的个数是不定的,因为每个DE只标识了图像的一个属性,那么这幅图像有N个属性就会有N个DE,用户甚至可添加自定义的标记属性,这就是为什么称TIF格式文件为“可扩充标记的文件”的原因。

我们接下来就详细研究一下DE。

2.3 目录项(Directory Entry,DE)

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

名称 字节数 数据类型 说明
tag 2 int 本属性的标签编号
type 2 int 本属性的数据类型
length 4 long 该类型数据的数量,而不是某个数据的长度
value/valueOffset 4 long 属性值本身,或属性值的存放偏移量(图上有虚线箭头!),大于4字节就需要用指针
  • tag是该属性的标签编号(TagID),在图像文件目录中,它是按照升序排列的(但不一定是连续的)。TIFF的tags有很多,详情请见TIFF 6.0 Specification::Appendix A
    在这里插入图片描述
    在这里插入图片描述

这里挑选了一些常用tags进行翻译列出:

TagID 属性名称 说明
0x0100 图像宽  
0x0101 图像高  
0x0102 颜色深度 值=1为单色,=4为16色,=8为256色。如果该类型数据个数>2个,说明是真彩图像
0x0103 图像数据是否压缩 值=05表示压缩
0x0140 调色板偏移量 值=1为单色,=4为16色,=8为256色。如果该类型数据个数>2个,说明是真彩图像

有些值,如水平(垂直)分辩率是分数型的属性,其值要占用8个字节,占用空间大,故存储的是其具体数值的偏移量。

这里再附上一个中文的tags功能查阅文献,给自己未来使用

2.4 图像数据

这些数据可能是压缩的,也可能是未压缩的。如果经过压缩,那么压缩算法又有许多种,所以,图像数据是TIF文件中最为复杂的部分,暂还没有单个程序能译出所有的压缩算法。

2.5 上述数据的排列顺序

值得注意的是,由于IFH、IFD、DE中存在各种各样的指针,因此,有时这些元数据甚至可能出现在数据后。一般的数据结构是:

数据组织结构(上至下)
IFH(含有指向IFD的偏移量,偏移量中间夹着的就有图像数据)
图像数据
IFD和DE中指针指向的值
IFD

一般要根据指针来判断具体位置。

3 实例分析

我找到了一张lena.tiff如下图:

在这里插入图片描述

对该图像进行分析.

3.1 整体概览

在这里插入图片描述

由该文件的IFH得知该图像的第一个IFD所在位置,然后由DE计数器得知该图像的10个属性,根据指针便宜位置可以访问到DE;又知该TIFF只有一个IFD,即一幅图像。

3.2 IFH分析

在这里插入图片描述

标出的棕色部分即为IFH部分。查阅数据定义,可以知道:

名称 字节数 该图像的值 意义
Byteorder 2 4D 4D 成员是“MM”(0x4d4d) 表示该 TIFF 图是摩托罗拉整数格式
Version 2 00 2A 十进制的42,永恒不变
Offset to first IFD 4 00 0C 00 08 第一个IFD,从文件开始处的偏移量

3.3 接下来是大量的图像数据

在这里插入图片描述

3.4 第一个(也是最后一个)IFD

接下来我们按照指针给出的第一个IFD的位置。

在这里插入图片描述

棕色部分开始标出的就是IFD数据。

名称 字节数 意义
Directory Entry Count 2 00 0A 有10个DE
Directory Entry(1) 12 00FE00040000000100000000 见 表 DE1
Directory Entry(1) 12 010000030000000102000000 见 表 DE2
Directory Entry(1) 12 010100030000000102000000 见 表 DE3
Directory Entry(1) 12 0102000300000003000C0086 见 表 DE4
Directory Entry(1) 12 010300030000000100010000 见 表 DE5
Directory Entry(1) 12 010600030000000100020000 见 表 DE6
Directory Entry(1) 12 011100040000000100000008 见 表 DE7
Directory Entry(1) 12 011500030000000100030000 见 表 DE8
Directory Entry(1) 12 0117000400000001000C0000 见 表 DE9
Directory Entry(1) 12 011C00030000000100010000 见 表 DE10
Offset to next IFD 4 00 00 这是最后一个IFD

3.5 10个DE

DE1

名称 字节数 意义
tag 2 00 FE NewSubfileType: 254 新的子文件类型标识。用比特来标识图像的类型,Bit0如果是1代表缩略图,Bit1如果是1代表多页图像中的某一页,Bit2如果是1代表它是透明度掩码图像.其余的位数暂时没有定义。
type 2 00 00 long
length 4 1 只有一个参数
value/valueOffset 4 0 属性值本身是0。该图像Bit0,1,2都不是1

剩余九个DE以类似的方法读取,这里直接读取后总结每个DE的意义。(参考了很久很久的手册!!!!辛苦了!!!!!)

Which DE 意义
DE2 图像宽度为512
DE3 图像长度为512
DE4 R\G\B三通道的位深度(原文:BitsPerSample,比特每样点)都是2048
DE5 压缩类型为1,无压缩(Uncompressed)
DE6 PhotometricInterpretation值为第2类,即颜色空间为RGB
DE7 每个Strip偏移量为8
DE8 每像素样点数为3
DE9 每个Strip的长度为786432
DE10 PlanarConfiguration(How the components of each pixel are stored.),我理解的是每个像素点的存储格式,是BGR,RGB,或甚至是GBR?? 值=1

DE9和DE10后各有1字节填充。

4 问题和总结

  1. 这一段没太看懂,也搜不到,翻译出来更是难以理解。TIFF field到底是什么?
    在这里插入图片描述
  2. PlanarConfiguration(How the components of each pixel are stored.)这个参数啥意思
  3. 我观察了PNG、TGA、TIFF、BMP。发现了这些图像格式有的一些共性:
  • 拥有说明整个文件的信息
  • 拥有说明图像信息的原数据
  • 图像的原始数据
  • 调色板

这些元素永远存在于图像格式中,只是他们组织数据的方式有所不同。有些格式非常规范;有些格式复杂,却带来了非常大的灵活度。

  1. TIFF的一些特点:
  • 它可以包含多个IFD,这也就意味着一个文件包含多张图片的可能
  • 它对图像信息的说明采用了很多Tags,有的规定好了是公认的,剩下则是可以自定义。这样就可以软件自定义,比如一个软件专门设置一个tag给软件之间交换时说明用处。这是非常灵活的。
  1. TIFF即支持无压缩,也支持下列压缩方法(Specification中列出):
    在这里插入图片描述

5 参考文献和资料

  1. 来自Rice University的Lena标准测试图像
  2. 来自Adobe的TIFF 6.0 Specification
  3. 【文件格式-TIFF】TIFF图像格式结构
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门