Android开发中的图片压缩

几种常见的压缩方式

1.质量压缩
bitmap.compress(Bitmap.CompressFormat.JPEG,50,outputStream)

或降低采样率

val options = BitmapFactory.Options()
options.inSampleSize = 2
val compressedBitmap = BitmapFactory.decodeFile(pathName,options)
2.色彩压缩
val options = BitmapFactory.Options()
options.inPreferredConfig = Bitmap.Config.RGB_565
val compressedBitmap = BitmapFactory.decodeFile(pathName,options)
3.裁剪压缩

降低图片分辨率,减小图片尺寸。比如将图片缩小一半:

val bitmap = BitmapFactory.decodeFile(path)
val matrix = Matrix()
matrix.setScale(0.5f, 0.5f)
val scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.width / 2, bitmap.height / 2, matrix, true)

采用哪种压缩方式,根据业务场景而定,例如用户头像用裁剪压缩,其他场景一般常用质量压缩等等。

图片处理框架

在Java应用中使用

这里推荐一个Google开源的图片处理框架Thumbnailator。它可以对图片进行缩放、裁剪、压缩、旋转、加水印等操作。详细介绍和更多的使用指南,请访问开源地址:https://github.com/coobird/thumbnailator

此框架常用于服务端处理图片,搞后端的同学应该对其并不陌生。

集成依赖:

<dependency>
  <groupId>net.coobird</groupId>
  <artifactId>thumbnailator</artifactId>
  <version>0.4.11</version>
</dependency>

要实现图片压缩,用法也非常简单:

Thumbnails.of(srcFile)//源文件
            .scale(1.0)//缩放级别:0-1
            .outputQuality(0.5f)//输出质量:0-1
            .toFile(toFilePath);//目标路径

根据实际使用得知,压缩后的图片文件大小能降低50%甚至更多,而且画质损失极小,基本难以感知到。

在Android项目中使用

Thumbnailator虽然是基于Java的,但是它用到了java.awt.*里面的类,在Android中无法访问到这些类,而且将java.awt包导入Android项目的成本也比较高,所以Thumbnailator尽管优秀,但可惜无法应用于移动端。

Android中比较知名的图片压缩框架是LubanCompressor。Luban的压缩算法听说是根据微信图片压缩逆推的;Compressor则支持Kotlin的协程。

Luban开源地址:https://github.com/Curzibn/Luban

Compressor开源地址:https://github.com/zetbaitsu/Compressor

Compressor使用方便且API比较简单,下面介绍Compressor的简单使用:

集成:

implementation 'id.zelory:compressor:3.0.0'

使用:

val toFile = File(toPath)//压缩后图片的保存路径
val resultPath = Compressor.compress(context, toFile) { 
     quality(25)//压缩质量0-100
}.path

压缩后画质还行,25的quality图片大小减少50%甚至更多;quality为50时,图片大小减幅不大,在50%以内。

    原文作者:toaksg
    原文地址: https://blog.csdn.net/zengd0/article/details/109450214
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞