数据压缩第二周作业——图片TIFF格式分析

  • Post author:
  • Post category:其他




TIFF格式概述

TIFF(Tagged Image File Format):

标记文件格式

,是一种灵活的

位图

格式,TIFF位图文件默认的文件扩展名是

tif或者tiff

。(注意,tif和tiff可以理解为文件格式相同)



特点

  • 在刚开始,TIFF只支持二值图像,后来逐渐支持灰阶图像和彩色图像。现在可以将TIFF分为

    四种

    类型:TIFF-B,双色;TIFF-G,黑白灰度;TIFF-P,带调色板的彩色图形;TIFF-R,适合RGB色彩的图形。
  • 支持256色、24位真彩色、32位色、48位色等多种色彩位;
  • 支持RGB、CMYK以及YCbCr等多种色彩模式,支持多平台;
  • 最大位深为

    32bit


  • 支持压缩和不压缩

    两种类型,其中压缩支持多种压缩格式,变化较多。
  • 通常TIFF文件的格式如下:最常见的排列方式为:

    IFH-文件数据-IFD

    在这里插入图片描述



组成

TIF图一般由三个部分组成:文件头(简称IFH)、文件目录(简称IFD)以及图像数据。

一个TIFF文件可以有多个IFH,但是只能有一个IFD。

下面仔细介绍一下TIFF文件。

(所有的标签都是以

升序

排列)


在检索时,可以快速利用偏置位置迅速找到数据所在位置。




图像文件头(Image File Header – IFH)

由8个字节组成,以

升序排列

,IFH 包含 3 个成员:Byteorder、version、offset to first IFD。

名称 字节数 数据类型
Byteorder 2 整型
Version 2 整型
Offset 4 整型



Byteorder

字节顺序标志位,取值为4D4D(“MM”)或4949(“II”)。MM表示大字节在前,小字节在后,II表示小字节在前,大字节在后。



Version

TIFF标志位,值固定为 2A00(42)。


可用于检验tiff文件



Offest to first IFD

偏置,

第一个

IFD

相对于文件起始位置

的偏移量(由于偏置必须以 Word 边界开始,因此值必须为2的整数倍)。

注意:IFH后不一定紧接着就是IFD,通常有的时候会先有多个IFH,才会有IFD。




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

和IFH一样,IFD同样包含三个元素:Directory Entry Count、Directory Entry以及Offset to next IFD。IFD用于标识一个图像的

所有属性

,具有图片属性也称为图片标签。

  • 一个 TIFF 文件可以包含多个 IFD,一个 IFD 标识一个图像的属性。
名称 字节数 数据类型
Directory Entry Count 2 整型
Directory Entry n*12 整型
Offset to next IFD 4 Long



Directory Entry Count

DE(Directory Entry )个数,表示此IFD中包含多少个DE。假设此IFD具有n个DE。



Directory Entry

DE,每个DE标识图像的一个属性,图像具有n个属性则具有n个DE,一个DE占用12个字节,因此n个DE总共占用(n*12)个字节。



Offset to next IFD

距离下一个IFD相对于

文件开始

的偏移量。例如,如果一个TIF文件中只包含一张图片,则只有一个IFD,偏移量等于0。



DE(图像属性)的详细说明

一个 DE 记录一个图像的属性,例如图像的分辨率、是否进行压缩等。其存储结构如下所示:

名称 字节数 数据类型
Tag 2 整型
Type 2 整型
Length 4 Long
Offset 4 Long
  • Tag:属性的标签编号,按

    升序

    排列。
  • Type:属性的数据类型
  • Length:该类型的数据

    个数

    (数量)
  • Offest:

    (有时没有offset)

    是TagID代表的变量值相对文件开始处的偏移量,如果实际数据的字节数小于等于 4,则不需要设置偏移量,直接存储数据。

Type类型:Rational:由两个Long组成,第一个位分数,第二个位偏移地址

其中Tag属性根据一下表中数据判断:

TagID 属性名称 type 说明
0100 图像宽 int (分辨率单位)
0101 图像高 int (分辨率单位)
0102 颜色深度 int 1为单色,4为16色,8为256色;如果该类型数据个数>2个,说明是真彩图像
0103 图像数据是否压缩 int 05表示压缩
0106 图像是否采用反色显示 int 01表示反色,否则表示不反色
011A 水平分辩率偏移量 Rational 常用计量单位是:像素/英寸
011B 垂直分辩率偏移量 Rational 常用计量单位是:像素/英寸
0132 生成该图像的时间 ASCII 文本类型(7位ASCII码加1位二进制0)
0140 调色板偏移量 int 256色和16色图像才有此属性;而且有连续2个

1、Rational指分数类型,由两个Long组成,第1个是分子,第2个是分母

2、ASCII码:文本类型

2、在Adobe官网我找到了TIFF详细的DE定义,附在参考文献中,供大家查询。





图像数据

TIFF支持多种数据存储格式(包括压缩未压缩、像素位存储或颜色面存储等),根据IFD中的设置进分析。TIFF支持的数据压缩类型可能比任何其他的图像文件格式都多。因此TIFF具有一个弊端,由于其压缩方式的多样性,许多有效的TIFF文件可能只能由个别程序进行识别。

(不过实际中图像经常采用LZW压缩)

在不缓冲整个文件的情况下,TIFF文件的流式传输在所有情况下都是不可能的。

目前Adobe享有TIFF规范版权,用于TIFF格式的管理和维护。Adobe可以创建带有单层图层的TIFF文件,同时还可以选择使用图像金字塔保存TIFF。




实例详解


注意:在读写字节流时由于TIFF为小字节在前,要从右向左读。


在这里插入图片描述

PS:CSDN上上传不了tiff格式的图片,利用wechat截图给大家举一个例子;将tiff格式的图片利用Visual Studio 2019二进制编辑器打开。

最终获得的二进制码如下:

在这里插入图片描述

逐次进行验证:


1、IFH部分:


在这里插入图片描述

名称 长度 实例 数据说明
字节顺序 2 49 49 从小字节在前
TIFF标志位 2 00 2A TIFF固定值
偏置 4 8 第一个IFD的偏移量
图像数据

(此图只有一张图片,故有且只有一个IFD)

  • 对偏移量做一点说明:偏移量08

    (指向第1行,第8列)


2、IFD部分:


由IFH中偏移量得出:08为IFD开始处,有0x14,也就是十进制中20个DE(图片属性),每个DE占12个字节,20个DE共占240字节;

对DE进行分析:
请添加图片描述

图中用不同颜色标记处不同的DE,从最开始深蓝色标注处的DEcount起,00FE为一个DE的名称…以此类推。

序号 Tag Type Length Value/Offset 说明
1 FE 00 long 1 0 新子文件类型(New SubfileType)
2 01 00 int 1 303 图片宽度:303(分辨率单位)
3 01 01 int 1 300 图片长度:300(分辨率单位)
4 01 02 int 3 012c.H(偏移地址) 3个int型,分别用3bit表示,此为24位真彩图
5 01 03 int 1 1 图片未经过压缩
6 01 06 int 1 2 图像为RGB图像,未反色(0表示黑,最大值表示白)
7 01 11 long 1 4C6A.H(偏移地址)
Strip Offset

:每个条状数据在文件中的偏移量
8 01 12 int 1 1 第0行表示图像的可视顶部,第0列表示可视左侧(图像无隐藏部分)
9 01 15 int 1 3 RGB三通道
10 01 16 int 1 012C.H(偏移地址)
RowsPerStrip

每个条带内图像的行数
11 01 17 long 1 04293C.H(偏移地址)
StripByteCount

当采用某种压缩方式后,每个条带内包含的字节数
12 01 1A Rational 1 0104.H(偏移地址) 宽度方向上每分辨率单位包含的像素个数
13 01 1B Rational 1 010C.H(偏移地址) 长度方向上每分辨率单位包含的像素个数
14 01 1C int 1 1 每个像素的采样值连续存储,只有一个图像平面
15 01 28 int 1 2 分辨率单位(inch英尺)
16 01 31 ASCII 31 0114.H(偏移地址) 用于创建映像的软件包的名称和版本号
17 01 32 ASCII 20 0134.H(偏移地址) DateTime 图片创造的时间
18 02 BC byte 20 148.H(偏移地址) 未知
19 49 86 byte 5,382 156.H(偏移地址) 未知
20 69 87 long 1 475A8.H(偏移地址) 未知



总结

1、值得一提的是,在建立TIFF图片文件时,我最开始使用画板创建的tiff图片太宽,宽高太夸张,于是我就用PS对图片进行截取,最终获得了合适的图片。再利用PS进行图片保存过程时,选择储存图片方式位tiff会弹出这种提示窗,用户可以选择压缩或者不压缩两种格式。

这也验证了TIFF图片存储具有多种方法,支持压缩也支持不压缩。

2、TIFF的DE标签存储的内容很大,最开始练习读TIFF16进制数据的时候不太习惯,有的时候很容易找不到DE标签的位置。

在这里插入图片描述

参考资料:

1、DE标签官方解释:https://www.awaresystems.be/imaging/tiff/specification/TIFF6.pdf

2、TIFF文件格式详解:http://blog.sina.com.cn/s/blog_668aae7801017gr9.html

3、tiff标签简单使用说明:http://t.csdn.cn/or5X6



版权声明:本文为Adore11原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。