TIFF数据格式实例分析

初步概念参考: https://www.cnblogs.com/gywei/p/3393816.html
素材下载https://download.csdn.net/download/u010476739/11485520
官方格式文档说明: https://www.awaresystems.be/imaging/tiff/specification/TIFF6.pdf
分析时的辅助软件(AsTiffTagViewer): https://www.awaresystems.be/imaging/tiff/astifftagviewer/installer0200.exe

一 准备图片

1.1 打开window画图:

win+r
mspaint

1.2 将图像尺寸调整为5*2像素

1.3 最终图片为:

在这里插入图片描述

1.4 将图片另存为tif

在这里插入图片描述

1.5 检查文件二进制数据

使用editplus打开,16进制模式查看:
在这里插入图片描述

二 开始分析

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

  • 0-1字节:49 49 翻译到英文为:II,表示小字节在前。
  • 2-3字节:2A 00 翻译成数字为:42,一般都是42(官网文档解释:An arbitrary but carefully chosen number (42) that further identifies the file as a
    TIFF file)
    4-7字节:1C 00 00 00表示的是第一个IFD的偏移量

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

从2.1的分析中已经得知了第一个IFD的偏移量是1C,那么直接跳到这个位置阅读(中间跳过的字节先不管,后面会分析到)。

  • 1C-1D字节:0F 00 翻译到数字为:15,表示此IFD包含了15个DE,那么从1E-D1正好是15个DE(12*15=180个字节,D1-1E+1=180个字节[16进制算法])。注意:这个IFD所占的空间为(1C-D5),别忘了IFD的最后还有四个字节。
  • 从上面的分析知道了15个DE所占的字节,这里直接将这些DE的解析结果贴出来:
    在这里插入图片描述
    这里着重分析红线标红的四个DE
  • StripOffsets和StripByteCounts,这两个DE表示的是图像数据的位置,也就是说图像数据是从第8个字节开始并且长度为20.
    找到这一块数据的位置,发现正好是IFH和第一个IFD中间的部分(也是上面说的“中间跳过的字节先不管,后面会分析到”)
  • BitsPerSample:官方文档给的解释是:“Number of bits per component”,再结合“Photometric”这个DE的值来看,不难发现它们要表达的意思是这个图像使用RGB颜色表示,每个元色用1个字节(8)个比特位来表示。表达的意思知道了,那么看看它是怎么存储的,找到这个DE的前两个字节(42-43):02 01,它是DE的tag,表示的意思就是“itsPerSample”,接着看后面两个字节(44-45):03 00 它表示的是数据类型,查看官方文档的数据类型的表格说明(下图)得知它占2个字节,接着看后面四个字节(46-49):03 00 00 00 它表示的是数据的数量,翻译过来就是3个字节长度为2的数据,总共六个字节。那么这六个字节在哪呢?接着看后面的四个字节(4A-4D):D6 00 00 00 由此可知这六个字节是D6-DB,把数据读出来正好是8,8 ,8
  • XResolution与YResolution:这两个DE表示的是分辨率,分析的方法同上一个,之所以提出这两个是因为它们的数据所占的字节正好是最后的16个字节,你可以试试。

在这里插入图片描述

三 分析完毕,所有的字节都被覆盖到!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackletter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值