Android中通过Luban压缩框架实现对图片的压缩

前言:在安卓开发中,图片压缩是常用的一个功能,比如在做头像上传的时候就需要对用户上传的头像裁剪压缩。下面我就简单来介绍一下我平常常用的一个图片压缩框架。

Luban

Luban —— Android图片压缩框架,主要是仿微信朋友圈压缩策略

框架的github链接:https://github.com/Curzibn/Luban

接下来来介绍如何使用:

导入

compile 'top.zibin:Luban:1.1.8' 或 implementation 'top.zibin:Luban:1.1.8'

方法列表

方法 描述
load 传入原图
filter 设置开启压缩条件
ignoreBy 不压缩的阈值,单位为K
setFocusAlpha 设置是否保留透明通道
setTargetDir 缓存压缩图片路径
setCompressListener 压缩回调接口
setRenameListener 压缩前重命名接口

异步调用

Luban.with(this)
      .load(selectPath)  // 传人要压缩的图片列表(包括file,path,List)
      .ignoreBy(100)   // 不压缩图片的大小
      .setTargetDir(Constant.DICTIONARY)//压缩文件保存路径
      .setCompressListener(new OnCompressListener() {
              @Override
              public void onStart() {
                   // 压缩开始前调用
              }

              @Override
              public void onSuccess(File file) {
                   // 压缩成功后调用,返回压缩后的图片文件
                   showBaseToast("图片路径:" + file.getPath());
              }

              @Override
              public void onError(Throwable e) {
                   // 当压缩过程出现问题时调用
                   System.out.println("错误信息: " + e.getMessage());
                   showBaseToast("图片压缩失败");
              }
           }).launch(); //启动压缩

同步调用

同步方法请尽量避免在主线程调用以免阻塞主线程,下面以rxJava调用为例

Flowable.just(photos)
    .observeOn(Schedulers.io())
    .map(new Function, List>() {
      @Override public List apply(@NonNull List list) throws Exception {
        // 同步方法直接返回压缩后的文件
        return Luban.with(MainActivity.this).load(list).get();
      }
    })
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe();

以上就是对Luban图片压缩框架的简单介绍,还有我也在用的另外一个图片压缩框架是Compressor 可以返回bitmap对象,感兴趣的童鞋可以自行研究, github链接:https://github.com/zetbaitsu/Compressor

你可能感兴趣的:(Android中通过Luban压缩框架实现对图片的压缩)