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张图片的信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值