Android-推薦一個(gè)圖片壓縮框架(Luban)

圖片來源網(wǎng)絡(luò),入侵必刪

在日常的Android開發(fā)當(dāng)中,我們肯定會(huì)遇到對(duì)上傳的圖片先進(jìn)行壓縮的需求,這里推薦一個(gè)常用的圖片壓縮框架——Luban,希望能幫小伙伴們?cè)陂_發(fā)中提高效率。

Luban

Luban,中文名稱是魯班,是仿朋友圈的壓縮策略。

引入項(xiàng)目

implementation 'top.zibin:Luban:1.1.8'

截止我發(fā)博客最新的版本是1.1.8,最新的Luban版本請(qǐng)查看wiki

壓縮效果對(duì)比

作者有提高一個(gè)壓縮對(duì)比提供參考。

內(nèi)容 原圖 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
滾動(dòng)截屏 1080x6433,1.56M 1080x6433,351k 1080x6433,482k

看到這個(gè)壓縮對(duì)比,發(fā)現(xiàn)還是和朋友圈的相近的,看到開源庫(kù)作者說是通過逆推出算法,真的厲害。

方法列表

方法 描述
load 傳入原圖
filter 設(shè)置開啟壓縮條件
ignoreBy 不壓縮的閾值,單位為K
setFocusAlpha 設(shè)置是否保留透明通道
setTargetDir 緩存壓縮圖片路徑
setCompressListener 壓縮回調(diào)接口
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 壓縮開始前調(diào)用,可以在方法內(nèi)啟動(dòng) loading UI
          }

          @Override
          public void onSuccess(File file) {
            // TODO 壓縮成功后調(diào)用,返回壓縮后的圖片文件
          }

          @Override
          public void onError(Throwable e) {
            // TODO 當(dāng)壓縮過程出現(xiàn)問題時(shí)調(diào)用
          }
        }).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();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容