FFMPEG之图片系列 --- tif 格式
2017-08-04 17:54
148 查看
TIFF: Tag-Based Image File Format, 基于标签的图像文件格式。是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。TIFF格式在业界得到了广泛的支持,如Adobe公司的Photoshop、The
GIMP Team的GIMP、Ulead
PhotoImpact和Paint
Shop Pro等图像处理应用、QuarkXPress和Adobe
InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。从Aldus获得了PageMaker印刷应用程序的Adobe公司现在控制着TIFF规范。
下图展示了TIFF文件中可存储的数据类型及标签中需要存储的图像属性参数:
格式特点:
1. TIFF可以描述多种类型的图像,二值图,灰度图像,索引图像,RGB图像,YCbCr图像等;
2. TIFF拥有一系列的压缩方案可供选择,无压缩,1维修改霍夫曼编码;PictBits,LZW,JPEG等;
3. TIFF不依赖于具体的硬件;
4. TIFF是一种可移植的文件格式;
可扩展性:
在TIFF 6.0中定义了许多扩展,他们允许TIFF提供以下通用功能:
1. 前面提到的集中压缩方法;
2. 多种色彩表示方法;
3. 图像质量增强;
4. 特殊图像效果;
5. 文档的存储和检索帮助。
格式复杂:
TIFF文件的复杂性给开发者带来了一些问题。一方面,要写一种能够识别所有不同标记的软件非常困难。另一方面,一个TIFF文件可以包含多个图像,每个图像都有自己的IFD和一系列标记,并且采用了多种压缩算法。这样也增加程序涉及的复杂度。
下面就TIFF文件结构做大致描述:
TIFF文件以.tif为扩展名。其数据格式是一种3级体系结构,从高到低依次为:文件头,一个或多个称为IFD的包含参数属性的标签的目录和数据。
图像文件头信息(Image File Header):8字节头信息
Bytes 0-1: 字节序标识: 4949.H表示小端字节序;4D4D.H表示大端字节序。
Bytes 2-3:标识任意值,一般取42.H,注意字节序。
Bytes 4-7:指向文件中第一个IFD的偏移量。
图像文件目录IFD(Image File Directory):
Bytes 0-1: 前两个字节代表了此文件文件目录中有多少个目录项(Directory Entry).
Bytes 2~12*N+1: 每一个目录项12字节;其每一项定义如下:
Bytes 0-1:目录项标签,用来表示此目录项的参数属性;
Bytes 2-3:表示目录项的数据类型;
Bytes 4-7: 数据域的数据长度,长度以第二项表示的数据类型为单位;
Bytes 8-11:若数据可以存储在此域,则为这个目录项的对应值,否则为值在文件中偏移量。
Bytes 12*N+2~12*N+5:下一个IFD在此文件中的字节偏移, 当当前的IFD为文件最后一个IFD时,此域为0。
关于Directory Entry中的tag详细信息,可以参考:https://www.loc.gov/preservation/digital/formats/content/tiff_tags.shtml#intro
GIMP Team的GIMP、Ulead
PhotoImpact和Paint
Shop Pro等图像处理应用、QuarkXPress和Adobe
InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。从Aldus获得了PageMaker印刷应用程序的Adobe公司现在控制着TIFF规范。
下图展示了TIFF文件中可存储的数据类型及标签中需要存储的图像属性参数:
格式特点:
1. TIFF可以描述多种类型的图像,二值图,灰度图像,索引图像,RGB图像,YCbCr图像等;
2. TIFF拥有一系列的压缩方案可供选择,无压缩,1维修改霍夫曼编码;PictBits,LZW,JPEG等;
3. TIFF不依赖于具体的硬件;
4. TIFF是一种可移植的文件格式;
可扩展性:
在TIFF 6.0中定义了许多扩展,他们允许TIFF提供以下通用功能:
1. 前面提到的集中压缩方法;
2. 多种色彩表示方法;
3. 图像质量增强;
4. 特殊图像效果;
5. 文档的存储和检索帮助。
格式复杂:
TIFF文件的复杂性给开发者带来了一些问题。一方面,要写一种能够识别所有不同标记的软件非常困难。另一方面,一个TIFF文件可以包含多个图像,每个图像都有自己的IFD和一系列标记,并且采用了多种压缩算法。这样也增加程序涉及的复杂度。
下面就TIFF文件结构做大致描述:
TIFF文件以.tif为扩展名。其数据格式是一种3级体系结构,从高到低依次为:文件头,一个或多个称为IFD的包含参数属性的标签的目录和数据。
图像文件头信息(Image File Header):8字节头信息
Bytes 0-1: 字节序标识: 4949.H表示小端字节序;4D4D.H表示大端字节序。
Bytes 2-3:标识任意值,一般取42.H,注意字节序。
Bytes 4-7:指向文件中第一个IFD的偏移量。
图像文件目录IFD(Image File Directory):
Bytes 0-1: 前两个字节代表了此文件文件目录中有多少个目录项(Directory Entry).
Bytes 2~12*N+1: 每一个目录项12字节;其每一项定义如下:
Bytes 0-1:目录项标签,用来表示此目录项的参数属性;
Bytes 2-3:表示目录项的数据类型;
Bytes 4-7: 数据域的数据长度,长度以第二项表示的数据类型为单位;
Bytes 8-11:若数据可以存储在此域,则为这个目录项的对应值,否则为值在文件中偏移量。
Bytes 12*N+2~12*N+5:下一个IFD在此文件中的字节偏移, 当当前的IFD为文件最后一个IFD时,此域为0。
关于Directory Entry中的tag详细信息,可以参考:https://www.loc.gov/preservation/digital/formats/content/tiff_tags.shtml#intro
相关文章推荐
- libjpeg库编码图片为jpg(ffmpeg解码视频存储图片:RGB格式位图压缩为jpg格式图片)
- 利用FFmpeg将Jpeg图片转为任意视频容器格式
- ffmpeg分析系列之六(再次探测输入的格式)
- 关于出现错误:_tkinter.TclError: couldn't open "E:\Python系列\Python程序\Python安装.gif"tkinter中不能打开GIF格式图片的解决办法
- 利用FFmpeg将Jpeg图片转为任意视频容器格式
- 【Android学习笔记系列】AsyncTask、BaseAdapter整合异步加载用例(通过解析JSON格式数据加载网络图片内容)
- 获取RTF格式字符串中的二进制图片字符串列表-RTF研究系列
- 利用ffmpeg截取视频图像并保存为ppm和jpg图片格式
- 使用JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- ffmpeg分析系列之三(输入输出格式)
- java 图片文件格式转换(多页tif转jpg 、jpg转tif)
- 利用FFmpeg将Jpeg图片转为任意视频容器格式
- C#使用FFmpeg 将视频格式转换成Gif图片示例
- JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
- MATLAB 将多页.tif格式的图片转成多张单页的图片
- 使用FFmpeg把视频转换成JPG格式的图片
- C#对TIF图片格式压缩
- libjpeg库编码图片为jpg(ffmpeg解码视频存储图片:RGB格式位图压缩为jpg格式图片)
- ffmpeg原来还可以转换图片格式
- 如何用C#将tif格式的图片转化成jpg?