包体优化:01、图片的压缩格式

前言

所谓包体优化,是因为往往在实际发布App到具体平台上的时候,有时会有包体大小的限制,或者为了减小初始包体,增加下载量,或者为了节省流量,所以往往需要控制初始的包体资源大小以及使用动态网络加载远程资源以及热更代码相关技术。

一、打包过程中涉及的第一个点:图片的压缩格式

针对安卓几个重要的参数:


image.png

MaxSize:缩放最大尺寸,根据屏幕需要进行图片尺寸适当缩放,越大的屏幕画面越模糊。
Resize Algorthm:缩放算法其中有两种,

  1. Mitchell:默认的高质量调整大小算法。
  2. Bilinear:可能会提供比Mitchell更好,以保留一些噪点纹理,保留更清晰的细节。
    Format:压缩格式(ETC,DXT等)
    Compressor Quality:压缩质量

二、理解

  • 1、U3D对于图片的格式是自己生成的,而并不是你给他什么格式,他就用什么格式,一张10241024图在无压缩格式下,它会被U3D以无压缩文件形式存放,也就是说U3D里的Texture Preview里显示的占用大小*MB不只是内存占用大小,还是空间占用大小。U3D的内部机制为自动生成图片类型来替换我们给的图片,在图片的压缩方式上需要进行谨慎的选择。

  • 2、U3D所有图片的压缩格式都会以另一种方式来存储,不会以你给的方式来存储,只有你指定了某种格式,它才会转成你要的格式。而且压缩格式在Android里并不一定有效,因为Android的机型多,GPU的渲染方式也不一样,有的是Nvidia,有的是PowerVR,最最好的在安卓机子上启用RGBA16方式,因为这个是适应所有机型的,并且比32位占用量少一半,但也需要因项目而异,只是推荐使用的格式,可以多用,但要权衡内存和显示效果。

  • 3、一般来说3D游戏我们压缩贴图的时候会把贴图分为UI贴图和场景模型贴图来考虑,主要是因为有多重采样的缘故。3D游戏一般来说都是受摄像机远近大小改变而采取不同的采样大小,假设不设置多重纹理采样的话,在远处会有非常多的白色噪点。2D游戏的话,所有都不需要勾选多重采样,具有3D性质的贴图,假如我们都勾选上Generate Mip Map,这样会使贴图大小增加25%这样。

  • 4、图片压缩有多个维度需要选择:

  • (1)那种压缩算法

  • (2)是否保留透明通道A

  • (3)图片尺寸大小,如选择4x4,还是6X6等

  • (4)像素深度BPP
    Unity编辑器中给出的某一种具体的压缩方式就是这几个维度的组合。

  • 5、图片不同压缩方式影响的层面

  • (1)在运行内存中的大小

  • (2)在存储上的大小

  • (3)图片显示效果

具体尺寸压缩格式对比

  • 6、要点
  • Texture,都去掉alpha通道,作为背景展示的图片,基本都没有透明要求,有特殊要求的则放到atlas里面
  • Loading图这类需要比较精细的,则把图片设置为Automatic TrueColor,设置真彩色,保证不失真
  • 地图、缩略图、UI背景图等等要求不精细的,则可以设置为自动压缩格式(有压缩情况,都需要图片宽高尺寸是2的幂,可以在Advance里面设置toNearest)

三、其他图像概念

图像深度 BPP

图像深度是指存储每个象素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个象素可能有的颜色数,或者确定灰度图像的每个象素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或灰度图像中的最大灰度等级.比如一幅单色图像,若每个象素有8位,则最大灰度数目为2的8次方,即256.一幅彩色图像RGB3个温良的象素位数分别为4,4,2,则最大颜色数目为2的4+4+2次方,即1024,就是说象素的深度为10位,每个象素可以是1024种颜色中的一种.

色深

色深(Color Depth),也称之为色位深度,在某一分辨率下,每一个像素点可以有多少种色彩来描述,它的单位是“bit”(位)。典型的色深是8-bit、16-bit、24-bit和32-bit。深度数值越高,可以获得更多的色彩。

你可能感兴趣的:(包体优化:01、图片的压缩格式)