Unity3D如何减少安装包大小但不损耗图片质量
在项目实践中,往往需要显示一些大图片,比如登录背景、转场Loading背景、广告图等等满屏图片,一方面希望使用真彩色无损导入,保留图片的原汁原味;另一方面又希望使用压缩比率高的ETC/PVRTC导入,减少包大小。
比如底下这9个图:
分别采用真彩色RGBA 32bit/RGB 24bit、ETC 4bit压缩格式导入:
===
打包后大小如下(test_before.apk是导入9个图片之前打的包):
ETC4打包后增加大概就是这9个图片自身大小总和(1.11MB),而RGBA32/RGB24打包后则增加了约4MB,比ETC4多了不少(3MB)。
有一个思路可以解决上面问题:
按bytes方式读取图片资源,然后动态解码,再绑定到对应UI上面。
注意资源文件(*png/*.jpg)手动更改后缀即可(*.bytes),无需任何实际的格式转换,否则TextAsset.bytes取不出来内容。
关键代码如下:
采用bytes加载方式导入,优缺点如下:
优点:
(1)保留真彩色,原汁原味;
(2)支持压缩,且压缩率由美术把控;
缺点:
(1)加载和解码bytes消耗额外CPU;
(2)需申请额外临时内存。
(3)适用于动态绑定的图片。若是静态绑定则需要增加额外代码修改为动态绑定。
打包结果对比:
从上对比可发现,采用bytes打包后的大小几乎和ETC4一样小,但却保留了RGBA 32bit/RGB 24bit的原汁原味。