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张图片的信息。

你可能感兴趣的:(数据结构,游戏)