手游客户端图片资源的优化

Posted by 鸿杰 on October 11, 2015

手游中常用的图片格式分为png8、png24、jpg和pvr。png8要么完全透明,要么完全不透明,而png24支持半透明,jpg完全不透明,pvr支持半透明,并且是大部分手机显卡直接支持的,不需要额外的解析。 从体积大小上比较各种格式:pvr ≈ png24 > jpg > png8 从解析效率和内存峰值上比较: jpg > png24 = png8 > pvr 那么我们在进行图片资源优化时有哪些原则和方法呢?

  1. 舍弃pvr。时至今日,几乎所有手机的显卡都已经支持pvr,但是为何大家都不选择pvr呢?pvr的唯一优点是其能够给大部分手机的显卡直接支持,不需要解析就能渲染,但是硬件性能的提升已经让这唯一的优势荡然无存了。

  2. 不透明的背景图全都使用jpg。jpg最大的优势便是体积小,虽然显卡在解析jpg时,需要复制两份图片数据导致内存峰值很高,但是内存峰值的问题,在目前的硬件条件下已经不再是大问题了。

  3. 需要支持透明的图片都使用png24。为什么这里不选择png8?因为png8能够存储的颜色数量有限,简而言之就是png8不够艳,在这个拼脸的时代里,颜值不高就什么都不对了。

  4. 安装包太大,老板说“你丫的快给老子把安装包压缩到80M以内”怎么办?使用jpg+png8。jpg之所以不支持透明,是因为它不存储透明通道信息,而png8正好可以存储透明通道信息,所以我们就可以把一张png24的图拆成一张jpg和一张png8,压缩比在90%左右,这个压缩比非常可观,缺点就是解析比较慢,内存峰值也比较高。程序在读取图片时,首先解析jpg,拿到RGB通道数据,然后解析png8,拿到A通道数据,再生成一个新的空纹理,将得到的RGB数据和A数据赋值给这个新的空纹理,就得到了包含ARGB的纹理了,再交给显卡去渲染。因为要解析两张图片,所以解析时间是通常的两倍,内存峰值也是png24的2.5倍(png24是2,png8是2,jpg是3,jpg + png8就是5)。

  5. 使用一些图片压缩工具将图片体积变小。比如PP鸭,这个工具挺好使的,工具的制作团队开发的MarkMan也是个小神器。

另外说一点,美术作图时一定要考虑重用性 美术作图时一定要考虑重用性 美术作图时一定要考虑重用性