Android性能优化之图片优化

时间:2022-12-09 18:09:59

图片的加载和显示是每个APP都避免不了的问题,再了解Android中如何图片优化之前,先看一下Android系统支持的图片格式。

1. 图片的格式

目前移动端Android平台原生支持的图片格式主要有:JPEG、PNG、GIF、BMP、和WebP(自从Android 4.0开始支持),但是在Android应用开发中能够使用的编解码格式只有三种:JPEG、PNG、WebP,图片格式可以通过查看Bitmap类的CompressFormat枚举值来确定。

public static enum CompressFormat {
JPEG、
PNG、
WebP;

private CompressFormat() {

}
}

如果要在应用层使用GIF格式图片,那么需要自己引用第三方函数库进行支持。

1.1 JPEG

JPEG是一种广泛使用的有损压缩图像标准格式,它不支持透明和多帧动画,一般摄像类作品最终都是以JPEG格式展示。通过控制压缩比,可以调整图片的大小。

1.2 PNG

PNG是一种无损压缩图片格式,它支持完整的透明通道,从图像处理领域将,JPEG只有RGB三个通道,而PNG有ARGB四个通道。由于是无损压缩,因此PNG图片占用空间一般比较大,会无形中增加最终APP的大小,在做APP瘦身时一般都要对PNG图片进行处理以减小其占用的体积。

1.3 GIF

GIF是一种古老的图片格式,它诞生于1987年,它的特点是支持多帧动画。

1.4 WebP

WebP由Google在2010年发布,它支持有损和无损压缩、支持完整的透明通道、也支持多帧动画,是一种比较理想的图片格式。在既保证图片质量又要限制图片大小的需求下,WebP应该是首选。

2. 图片的压缩

目前大多数APP都是PNG格式图片资源,我们可以通过几个工具对PNG图片进行压缩来达到瘦身的目的。

2.1 无损压缩ImageOptim

ImageOptim是一个无损的压缩工具,它通过优化PNG压缩参数,移除冗余元数据以及非必需的颜色配置文件等方式,在不牺牲图片质量的前提下,既减少了PNG图片占用的空间,又提高了加载的速度。

2.2 有损压缩ImageAlpha

ImageAlpha是ImageOptim作者开发的一个有损的PNG压缩工具,相比较而言,图片大小得到极大的降低,当然图片质量同事也会受到一定程度的影响,经过该工具压缩的图片,需要经过设计师的确认才能最终上线,否则可能回影响整个APP的视觉效果。

2.3 有损压缩TinyPNG

TinyPNG也是比较知名的有损PNG压缩工具,它以Web站点的形式提供,没有独立的APP安装包,同所有的有损压缩工具一样,经过压缩的图片,需要经过设计师的确认才能最终上线,否则可能回影响整个APP的视觉效果。

还有很多无损压缩工具,例如JPEGMini、MozJPEG等,大家自行选择适合自己项目的一个就行,主要是在图片大小和图片质量之间找到一个折中点。

2.4 PNG/JPEG 转换为WebP

如果你的APP最低支持到Android4.0,那么可以直接使用系统提供的能力来支持WebP,如果是4.0以下的系统,也可以通过在APP中集成第三方函数库例如webp-android-backport来实现对WebP的支持。根据Google测试,无损压缩后的WebP比PNG文件少了45%的文件大小,即使这些PNG文件经过其他压缩工具例如ImageOptim压缩后,WebP依然可以减少约28%的文件大小。

WebP转换的工具可以选择智图和iSparta等

2.5 尽量使用NinePatch格式的PNG图

.9.png图片格式简称NinePatch图,本质上仍然是PNG格式图片,它是针对Android平台的一种特殊PNG格式图片,可以在图片指定位置拉伸或者填充内容。NinePatch图的优点是体积小,拉伸不变形,能够很好地适配Android各种机型。Android SDK自带了NinePatch图的编辑工具,位于sdk/tools/draw9patch,点击即可启动;当然,Android Studio也集成了PNG转NinePatch的功能,我们只需右键点击某个需要转换的PNG图片,在弹出的对话框中选择Create 9-Patch File…即可自动完成转换。

3. 图片的缓存

图片的缓存框架有很多,常见的有四种

  • Android-Universal-Image-Loader
  • Picasso
  • Glide
  • Fresco

这四种图片加载框架的优劣就不在一一说明,因为随便一搜就可以知道答案,我们可以根据项目来权衡使用哪一个图片加载框架。

Thanks

《Android高级进阶》—顾浩鑫