UI效果

Android-推荐一个图片压缩框架(Luban)

2022-07-20  本文已影响0人  阿博聊编程
图片来源网络,入侵必删

在日常的Android开发当中,我们肯定会遇到对上传的图片先进行压缩的需求,这里推荐一个常用的图片压缩框架——Luban,希望能帮小伙伴们在开发中提高效率。

Luban

Luban,中文名称是鲁班,是仿朋友圈的压缩策略。

引入项目

implementation 'top.zibin:Luban:1.1.8'

截止我发博客最新的版本是1.1.8最新的Luban版本请查看wiki

压缩效果对比

作者有提高一个压缩对比提供参考。

内容 原图 Luban WeChat
截屏 720P 720x1280,390k 720x1280,87k 720x1280,56k
截屏 1080P 1080x1920,2.21M 1080x1920,104k 1080x1920,112k
拍照 13M(4:3) 3096x4128,3.12M 1548x2064,141k 1548x2064,147k
拍照 9.6M(16:9) 4128x2322,4.64M 1032x581,97k 1032x581,74k
滚动截屏 1080x6433,1.56M 1080x6433,351k 1080x6433,482k

看到这个压缩对比,发现还是和朋友圈的相近的,看到开源库作者说是通过逆推出算法,真的厉害。

方法列表

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

异步压缩的例子

Luban.with(this)
        .load(photos)
        .ignoreBy(100)
        .setTargetDir(getPath())
        .filter(new CompressionPredicate() {
          @Override
          public boolean apply(String path) {
            return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"));
          }
        })
        .setCompressListener(new OnCompressListener() {
          @Override
          public void onStart() {
            // TODO 压缩开始前调用,可以在方法内启动 loading UI
          }

          @Override
          public void onSuccess(File file) {
            // TODO 压缩成功后调用,返回压缩后的图片文件
          }

          @Override
          public void onError(Throwable e) {
            // TODO 当压缩过程出现问题时调用
          }
        }).launch();

同步压缩的例子

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

猜你喜欢

热点阅读