返回

11月更文挑战|Android基础-Bitmap图片压缩策略大全

Android

11 月,我正在参与更文挑战。这是我连续挑战的第六天。想要了解活动的更多信息,请查看:2021 最后一次更文挑战 前言。

正文

了解了 Bitmap 图片加载之后,就不得不提到图片压缩了。图片压缩在应用中必不可少,有效压缩图片降低应用内存占用事半功倍。

Bitmap 图片压缩策略

Bitmap 图片压缩的策略有很多,常用的有以下几种:

  • 采样率压缩 :通过降低图片的分辨率来压缩图片。
  • 质量压缩 :通过降低图片的质量来压缩图片。
  • 无损压缩 :通过使用无损压缩算法来压缩图片。

采样率压缩

采样率压缩是通过降低图片的分辨率来压缩图片。采样率压缩的算法很简单,就是将图片中的每个像素点按照一定的比例进行抽样,只保留其中的一部分。这样就可以在降低图片分辨率的同时,也降低了图片的体积。

采样率压缩的优点是压缩率高,缺点是会降低图片的质量。

质量压缩

质量压缩是通过降低图片的质量来压缩图片。质量压缩的算法是将图片中的每个像素点的颜色值进行量化,只保留其中的一部分。这样就可以在降低图片质量的同时,也降低了图片的体积。

质量压缩的优点是压缩率高,缺点是会降低图片的质量。

无损压缩

无损压缩是通过使用无损压缩算法来压缩图片。无损压缩的算法是将图片中的每个像素点的颜色值进行编码,然后将编码后的数据进行压缩。这样就可以在不降低图片质量的情况下,也降低了图片的体积。

无损压缩的优点是不会降低图片的质量,缺点是压缩率较低。

Bitmap 图片压缩示例代码

// 采样率压缩
Bitmap bitmap = BitmapFactory.decodeFile(path);
Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);

// 质量压缩
Bitmap bitmap = BitmapFactory.decodeFile(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
byte[] bytes = baos.toByteArray();

// 无损压缩
Bitmap bitmap = BitmapFactory.decodeFile(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] bytes = baos.toByteArray();

总结

Bitmap 图片压缩在应用中非常重要。通过合理使用 Bitmap 图片压缩策略,可以有效降低应用内存占用,提高应用性能。