我正在保存大量的小png文件,用于手机游戏,因此空间非常宝贵.
我试图弄清楚文件大小背后的逻辑,这样我可以最有效地保存东西,但即使使用pngcrush后,大小也完全不一致.
我保存了1x1图像,需要3kb.我有另一个23x21图像,只需2kb.我有两个图像几乎相同的大小,但一个需要6kb,另一个需要13kb.我将图像高度加倍并将一个图像复制到另一个图像的空白区域并保存.合并后的图像仅为11kb!
为什么1x1图像大于23x21图像?为什么我可以将13kb图像和6kb图像组合在一起并获得11kb图像?
以下是我正在谈论的图像(第1张图像和第2张图像之间有1x1像素.很难看到,所以我只提供URL:http://g42.org/temp/png/1x1. png):
示例http://g42.org/temp/png/hat.png 示例http://g42.org/temp/png/1x1.png 示例http://g42.org/temp/png/helmet1.png 示例http ://g42.org/temp/png/helmet2.png 示例http://g42.org/temp/png/helmet1_2.png
它不是压缩的东西,1x1图像的问题在于它具有元数据(似乎是由Photoshop添加),颜色配置文件(iCCP块).如果你查看二进制文件,它的'字符串"iCCP"和"IDAT"之间的数据,它可以被删除,你得到一个69字节的文件.如果您重新打开并保存文件大多数图像查看器(xnview),或使用pngcrush,您可以剥离该块.:在这里看到:
http://i.stack.imgur.com/fmOdA.png
关于头盔图像:除了其他信息块(imageReady广告一些信息文本,如你所见),差异是由于不同的格式:双头盔是一个调色板图像(每像素8位),单个头盔是一个带alpha的RGB(每像素32位)