compression - 找不到 png 文件大小背后的逻辑

标签 compression png

我正在保存大量小 png 文件以用于手机上的游戏,因此空间非常宝贵。

我试图找出文件大小背后的逻辑,以便我可以最有效地保存内容,但即使在使用 pngcrush 之后,大小也完全不一致。

我保存了一个 1x1 的图像,它需要 3kb。我有另一个 23x21 的图像,它只需要 2kb。我有两张大小几乎相同的图像,但一张需要 6kb,另一张需要 13kb。我将图像高度加倍并将一个图像复制到另一个图像的空白区域并保存。合并后的图像只有 11kb!

为什么 1x1 图像比 23x21 图像大?为什么我可以组合 13kb 图像和 6kb 图像并获得 11kb 图像?

这是我正在谈论的图像(第一张和第二张图像之间有一个 1x1 像素。很难看到,所以我只提供 URL: http://g42.org/temp/png/1x1.png ):

example http://g42.org/temp/png/hat.png
example http://g42.org/temp/png/1x1.png
example http://g42.org/temp/png/helmet1.png
example http://g42.org/temp/png/helmet2.png
example http://g42.org/temp/png/helmet1_2.png

最佳答案

这不是压缩问题,1x1 图像的问题在于它具有元数据(似乎是由 Photoshop 添加的)、颜色配置文件(iCCP 块)。如果你查看二进制文件,它是字符串“iCCP”和“IDAT”之间的数据,它可以被删除,你会得到一个 69 字节的文件。
如果您在大多数图像查看器 (xnview) 中重新打开并保存文件,或使用 pngcrush,则可以删除该块。 :在这里看到它:enter image description here http://i.stack.imgur.com/fmOdA.png

关于 Helm 图像:除了其他信息块(imageReady 广告一些信息文本,如您所见),不同之处在于格式不同:两个 Helm 是调色板图像(每像素 8 位),单个 Helm 是带 alpha 的 RGB(每像素 32 位)

关于compression - 找不到 png 文件大小背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7548336/

相关文章:

javascript - png图像的透明区域没有悬停 Action html css

java - 9-patch 文件中出现奇怪的黑边 - android

python - 如何在 Python 中创建一个空的 n*m PNG 文件?

c# - .NET 以与加载时相同的质量保存 jpeg

iis-7 - IIS 7 Http压缩不工作

java - 什么压缩库适用于 GAE

Java缓冲图像: Alpha change makes low alpha areas appear black

java - 如何从 Android (Java) 中的位图中读取元数据?

java - 压缩 BufferedImage 而不写入磁盘

javascript - 是否有用于组合/压缩 javascript 和 css 的 Magento 扩展?