首页 > 代码库 > tiff标签简单使用说明

tiff标签简单使用说明

一、目的

项目中使用了Tiff文件,之前使用的是Full-Color格式写的,即直接向文件中写入像素的RGB值,这种方式比较简单,但数据量较大,于是又改成使用Palette-Color格式来写,使用这种格式可以只将像素的强度写入文件就好了,然后再写入一个颜色表,图像显示时就可以根据像素强度和颜色表进行显示,数据量可以减小到原来的1/3,比较合适。在本文档中描述一下Full-Color格式和Palette-Color格式所用到的标签及他们的差别。

    二、Tiff支持的图像类型

tiff文件共支持四种图像类型,分别是Bilevel(黑白图像)GrayScale(灰度图像)Palette-Color(调色板图像)Full-Color(RGB图像)

黑白图像为二值图像,非黑即白,用的较少,灰度图像是黑白图像的一般情况,我们在项目中使用的是调色板图像和RGB图像。

    三、标签说明

1256

含义:图像宽度

类型:2字节short4字节inttiff文档中说成是4字节long,它们一直吧4字节叫做long

个数:1

偏移:即图像宽度,根据类型中设定的short还是int,填写对应类型的图像宽度

2257

含义:图像高度

类型:2字节short4字节int

个数:1

偏移:即图像高度,根据类型中设定的short还是int,填写对应类型的图像高度

3258

含义:BitsPerSample,即用多少位来表示一个图像像素点

类型:2字节short4字节int(由于偏移值值最大才为8,因此,个人觉得,根本用不到4个字节)

个数:对于调色板图像,只需一个字节就可以了,因此个数为1,但对于RGB图像,需要三个字节,因此个数为3

偏移:对于调色板图像,该值是4或者8,对于RGB图像,该值是4,4,48,8,8,因为这里需要填写3个数,所以需要在这里填写一个偏移地址,然后再到偏移地址中去找这三个值。

4259

含义:Compression,压缩方法

类型:short

个数:1

偏移:只有三个值可以选,1表示不压缩,2表示CCITT压缩,32773表示PackBits压缩,对于调色板图像和RGB图像,偏移值填写1就可以了。

5262

含义:PhotomericInterpretation,图像所采用的色彩系统

类型:short

个数:1

偏移:0表示对于黑白及灰度图像而言,0为白色,1表示对于黑白及灰度图像而言,0为黑色,2表示图像以RGB方式存储,3表示图像采用调色板索引

6273

含义:StripOffsets,每个条状数据在文件中的偏移量

类型:shortint

个数:可以将全部图像数据作为一个条带,即令个数为1,也可以每行一个条带,此时个数就是图像的高度

偏移:即该条带内的图像在文件中的起始位置,如果全部图像都作为一个条带,且文件头后立即就存图像,则偏移量就是文件头所占的字节,即8,如果分成了多个条带,偏移量就是多个了,这时就得在这里填写一个偏移地址,然后根据偏移地址去找相应的偏移量。

7277

含义:SamplesPerPixel,每像素的取样数

类型:short

个数:1

偏移:只有两个值可选,1表示黑白或灰度或调色板图像,3表示RGB图像。

备注:在调色板图像中,这个标签不是必须的,但在RGB图像中,要求有这个标签。

8278

含义:RowsPerStrip,每个条带内图像的行数。

类型:shortint

个数:1

偏移:从字面意思来理解,这个标签应该是指每个条带内包含多少行图像数据,因此需要看看标签273中是怎么分的条带,如果只分一个条带,那就填写图像的高度,如果每行分成一个条带,那就填写1

9279

含义:StripByteCounts,每个条带内包含的字节数

类型:shortint

个数:需要根据273来填写,如果273中只分一个条带,那这里也填写1,如果273分成了n个条带,那这里就填写n

偏移:如果个数是1,说明全部图像只分了一个条带,因此这里的值就是图像的宽度乘以图像的高度,如果是每行分成一个条带,这里的值就是图像的宽度。

10282

含义:XResoluion,宽度方向上每个分辨率单位(见标签296) 包含的像素个数

类型:Rational(两个无符号整形,第一个代表分子,第二个代表分母)

个数:没实际用过这种变量,根据Rational的定义,这里应该填写2

偏移:填写一个偏移地址,指向分子所在的位置

11283

含义:YResolution,高度方向上每个分辨率单位包含的像素个数

类型:Rational

个数:2

偏移:填写一个偏移地址,指向分子所在的位置

备注:282283这两个标签应该是用来表示图像实际大小的,如果不需要知道图像的实际大小,这两个标签也可以不写。

12296

含义:ResolutionUnit,分辨率单位

类型:short

个数:1

偏移:只有3个值可选:1表示没指定单位,2表示以英寸为单位,3表示以厘米为单位。

13320

含义:Color Map,调色板数据

类型:short

个数:根据258的值来定,一般标签258的值为8,则个数为:2 * 2^8 = 768

偏移:由于需要写768个数,因此这里只能填写一个偏移地址,然后再根据偏移地址去找对应的数。

备注1:在偏移地址中写实际调色板数据时,注意先写256R分量,再写256G分量,再写256B分量,根据tiff文档中介绍,每个分量的值最大为65535,但是我采用最大值255去写,似乎得到的结果也是正确的。

备注2:这个标签只在调色板图像中使用,RGB图像是用不到这个标签的。

四、总结

本文只是简单介绍了一下所用到的一些标签,不需要偏移地址的比较容易用,需要偏移地址的仅靠本文或许仍无法编程实现,不过网上有不少例子,介绍tiff标签怎么编程实现。我的理解或许有的地方也不正确,仅仅做个参考罢了。

五、参考文献

《TIFF Revision 6.0 Final june 3,1992》

http://blog.csdn.net/lipond/article/details/1795306

 

tiff标签简单使用说明