将巨大的PNG文件压缩以在iPhone游戏中使用

3

我有一个背景文件,希望在iPhone游戏中使用,目前大小为40MB。它是一个.png文件,我想尽可能压缩它的大小,同时不失去太多质量并保留alpha通道。我成功地将类似大小的文件大小更改为.jpg文件类型,但这个图像没有任何透明度,据我所知,您无法将.png更改为.jpg而不失去透明度。也许我错了(如果我错了,请纠正我)。如果有一种方法可以压缩这个.png文件,请告诉我如何操作。此外,请注意,它是相当大的文件,如果可能的话最好在5小时内压缩。谢谢!


尝试使用这个应用程序 - http://www.irfanview.com/,您可以在保存时设置压缩级别。它还具有批量转换模式 - 因此您可以通过2-3次点击重新压缩所有图像。 - k06a
你为什么不试一下PNG Squeezer - Dr.Kameleon
当PNG被解压缩时,它占用的内存至少与其在磁盘上的压缩形式一样多,可能更多。如果有RGB和alpha通道,则在解压缩后每个像素需要4个字节。早期的iOS设备在尝试加载这么大的图像时会耗尽内存。你的背景图能分成独立的瓷砖吗? - Cowirrie
谢谢大家的建议,最好只使用一张图片,但如果情况变得更糟,我可能不得不将其分成多个瓦片。 - Fitzy
3个回答

4
你是如何构建游戏的?如果你直接使用OpenGL,并且你满意它提供的压缩,PVR是一种非常小巧且速度真的很快的图像格式。
关于PVRTC的更多信息,请查看维基百科:PVRTC on Wikipedia 正如keegan3d所说,Xcode会重新压缩PNG图像,使用PNGCrush。它会改变字节顺序并预乘alpha通道。这篇文章解释了发生了什么:iPhone "Optimized" PNGs 如果你保留Xcode的PNG压缩功能,则无法从使用PNG压缩工具中获得任何好处:PNG compression and iOS apps 如果你想仅禁用Xcode对一个图像的压缩(以便使用替代的压缩工具),我相信你可以将文件类型从image.png更改为file,如此解释:How can I skip compressing one PNG? 另外...要小心内存使用。JPEG和PNG解压后的大小相同(假设它们没有alpha通道)。40MB相当大。你有其他绘制背景的方法吗?我曾经参与过一个基于位图的2048 x 2048游戏区域的游戏开发,我们使用了PVR和tiles。PVR图像使用的内存比PNG少,并且速度更快。

2
我的基准测试中,最小尺寸和加载速度最快的PNG图像是使用ImageAlpha/pngquant创建的PNG8+alpha格式。
如果您的背景大多是单色或平坦的(没有太多模糊/渐变),那么PNG8+alpha格式看起来会很好。
您可以通过一种智能方式对PNG24+alpha图像进行分色处理,以提高它们的压缩性。
然而,一个40MB的PNG图像仍然非常巨大。我不会感到惊讶,如果它导致了内存问题。考虑将它分成更小的图块。

2

Xcode会压缩png图片,你需要查看构建应用程序中实际的图像大小。使用ImageOptim可以比Xcode更多地压缩图像,但它们在屏幕上显示时速度稍慢,对于您的背景图片可能不是问题。


谢谢,我没有意识到Xcode已经压缩了它们。这非常有帮助。 - Fitzy
是的,它们被压缩并优化以加快在GPU上的加载速度。ImageOptim可以进一步压缩它们,但在我的测试中,将它们放到GPU上会更慢,但只有在播放图像序列时才能注意到。 - keegan3d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接