Android CompressImage图片压缩工具类介绍

CompressImage是集成图片的质量压缩,像素压缩以及基于Luban算法的图片压缩三种压缩方式的工具

功能如下:

   1. 质量压缩:从质量层面进行相关压缩(原图片可通过该工具压缩至小于期望大小的图片)

   2. 像素压缩:设定固定的长和宽,然后进行压缩

   3. 基于Luban算法的压缩: 类比微信将图片压缩至不失真的图片大小

效果图:

  1. 像素压缩:从质量层面进行相关压缩

                                                    Screenshot

2. 质量压缩: 设定固定的长和宽,然后进行压缩

                                                       Screenshot

3. 基于Luban算法的压缩:类比微信将图片压缩至不失真的图片大小

                                                       Screenshot

使用方法:

然后在添加相关的依赖关系(不是根目录)

   dependencies {
       implementation 'com.github.heynchy:CompressImage:v0.1.2'
   }

代码中的设置

注意:对相关图片进行压缩时要确保手机的存储权限已经获得

1. 质量压缩 (注意使用时要确保运行在主线程中,包括处理返回信息时)

   // TODO 进行质量压缩
   /**
    *   确保该方法执行在主线程中
    */
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
           /**
            * 参数解析:
            * filePath: 要压缩图片的绝对路径
            * savePath: 压缩图片后的保存路径
            * maxSize: (例如1024)期望压缩的图片<= maxsize;单位为 KB
            */
            CompressImage.getInstance().imageMassCompress(filePath, savePath, 1024,
                 new CompressMassListener() {
                     @Override
                     public void onCompressMassSuccessed(final String imgPath) {
                        // 返回值: imgPath----压缩后图片的绝对路径
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                               /**
                                * 执行相关的UI操作确保在主线程中进行
                                */
                                Bitmap bitmap = PermissionUtil.getLoacalBitmap(imgPath);
                                mImagePressIv.setImageBitmap(bitmap);
                                mMassPressTv.setText("压缩后质量: " + FileSizeUtil.getFileOrFilesSize(imgPath));
                            }
                        });
                    }

                    @Override
                    public void onCompressMassFailed(final String imgPath, final String msg) {
                       /**
                        * 返回值: imgPath----原图片的绝对路径
                        *  msg----返回的错误信息
                        */
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                               /**
                                * 执行相关的UI操作确保在主线程中进行
                                */
                                Toast.makeText(MassImageActivity.this, msg, Toast.LENGTH_LONG).show();
                            }
                        });
                    }
               });
           }
    });

2. 像素(尺寸)压缩

  // TODO 进行像素压缩
  /**
   * 参数解析:
   * filePath: 要压缩图片的绝对路径
   * savePath: 压缩图片后的保存路径
   * maxWidth: 期望压缩后图片的宽度(像素值)
   * maxHeight: 期望压缩后图片的高度(像素值)
   */
   CompressImage.getInstance().imagePixCompress(filePath, savePath, 100, 100,
       new CompressPixListener() {
           @Override
           public void onCompressPixSuccessed(String imgPath, Bitmap bitmap) {
              /**
               * 返回值: imgPath----压缩后图片的绝对路径
               *        bitmap----返回的图片
               */
               mImagePressIv.setImageBitmap(bitmap);
               mMassPressTv.setText("压缩后质量: " + FileSizeUtil.getFileOrFilesSize(imgPath));
          }

          @Override
          public void onCompressPixFailed(String imgPath, String msg) {
             /**
              * 返回值: imgPath----原图片的绝对路径
              *        msg----返回的错误信息
              */
              Toast.makeText(PixImageActivity.this, "压缩失败", Toast.LENGTH_SHORT).show();
          }
   });

3.基于Luban算法的图片压缩(可得到体积小,图片不失真的图片,类比于微信)

   // TODO 进行Luban算法压缩
   /**
    * 参数解析:
    * filePath: 要压缩图片的绝对路径
    * savePath: 压缩图片后的保存路径
    */
    CompressImage.getInstance().imageLubrnCompress(filePath, savePath, new CompressLubanListener() {
        @Override
        public void onCompressLubanSuccessed(String imgPath, Bitmap bitmap) {
            /**
             * 返回值: imgPath----压缩后图片的绝对路径
             *        bitmap----返回的图片
             */
             mImagePressIv.setImageBitmap(bitmap);
             mMassPressTv.setText("压缩后质量: " + FileSizeUtil.getFileOrFilesSize(imgPath));
        }

        @Override
        public void onCompressLubanFailed(String imgPath, String msg) {
            /**
             * 返回值: imgPath----原图片的绝对路径
             *        msg----返回的错误信息
             */
             Toast.makeText(LubanImageActivity.this, msg, Toast.LENGTH_LONG).show();
        }

   });

GitHub 地址: 点击打开链接 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heynchy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值