PNG图片的背后

最近在做一个韩国LG的外包项目,在图片资源处理的时候发现一个有趣的做法.


有谁知道这张图片真正包含多少张图片?
初看只有一张,其实错了,它整整包含了14张图片,像:

等等.

现在我们来回顾一下PNG图片的结构:
1.PNG的文件结构
引用内容 引用内容
PNG文件标志 PNG数据块 …… PNG数据块


PNG文件标志是8 byte的,其中第一个字节0x89超出了ASCII字符的范围,这是为了避免某些软件将PNG文件当作文本文件来处理。
2.PNG文件标志
十进制数 137 80 78 71 13 10 26 10
十六进制数 89 50 4E 47 0D 0A 1A 0A

3.PNG数据块包括:
IHDR 文件头数据块 第一块
PLTE 调色板数据块 在IDAT之前
IDAT 图像数据块 与其他IDAT连续
IEND 图像结束数据 最后一个数据块

如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的: 00 00 00 00 49 45 4E 44 AE 42 60 82
不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。

好了,回归主题,一般我们处理PNG图片的常用办法是把它打包成pak,bin等形式。

然后这个游戏并没有这么做,而是把其它图片的数据直接copy到第一张图片的背后,由于PNG图片允许出现多个PNG文件头、文件尾,但它被查看的时候只显示第一张图片(有利于信息的隐藏,防盗版?)。



上图选定的地方就是第一张图片,而它后面还隐含其它13张图片的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值