可能是Android平臺上最快的圖片壓縮框架">可能是Android平臺上最快的圖片壓縮框架

分類:IT技術 時間:2017-09-30

(對不起,標題是騙人的)

emmm...不管怎麽說,我也寫了一個圖片壓縮框架。

在Luban的算法策略上,我豐富了外圍的api,提供更多的可配參數,多線程壓縮和不同細粒度的任務控制。

項目地址

https://github.com/ghnor/Flora

依賴

dependencies {
    ...
    
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.ghnor:flora:1.0.0-alpha1'
}

用法用例

  • 異步壓縮:
Flora.with().load(source...).compress(new Callback<>());
  • 同步壓縮:
Flora.with().load(R.drawable.test2).compressSync();

可控的壓縮任務

Flora.with(Activity)
Flora.with(FragmentActivity)
Flora.with(Fragment)
Flora.with(SupportFragment)
// 上面的四類,會自動在頁面生命周期結束後,終止壓縮任務。

// 通過TAG標誌位來結束一系列的任務。
Flora.with(TAG)
// 強制結束任務。
Flora.cancel(TAG);

// 無參,此時的任務進行其實是不受控的,強烈建議不要采用這種寫法。
Flora.with()

更多屬性

Flora.with()
        // 配置inSample和quality的算法,內置了一套基於Luban的壓縮算法
        .calculation(new Calculation() {
            @Override
            public int calculateInSampleSize(int srcWidth, int srcHeight) {
                return super.calculateInSampleSize(srcWidth, srcHeight);
            }

            @Override
            public int calculateQuality(int srcWidth, int srcHeight, int targetWidth, int targetHeight) {
                return super.calculateQuality(srcWidth, srcHeight, targetWidth, targetHeight);
            }
        })
        // 對壓縮後的圖片做個性化地處理,如:添加水印
        .addDecoration(new Decoration() {
            @Override
            public Bitmap onDraw(Bitmap bitmap) {
                return super.onDraw(bitmap);
            }
        })
        // 配置Bitmap的色彩格式
        .bitmapConfig(Bitmap.Config.RGB_565)
        // 最大文件尺寸,不建議配置此項,目前采用的方式是重復寫入文件,判斷大小,比較耗時
        .maxFileSize(1.0)
        // 同時可進行的最大壓縮任務數量
        .compressTaskNum(1)
        // 安全內存,設置為2,表示此次壓縮任務需要的內存小於1/2可用內存才進行壓縮任務
        .safeMemory(2)
        // 壓縮完成的圖片在磁盤的存儲目錄
        .diskDirectory(File)
        .load(source...)
        .compress();

其他

  • 壓縮速度

本身內部采用線程池的方案去進行壓縮任務,同時進行了必要的內存檢查。

在不會OOM的前提下,最大的提升了壓縮的速度,常見的9圖大小在20M+能夠在2s內處理完成。

當然,機器性能,系統當時的內存都是對此產生影響,我的測試機是【魅藍Note】...

  • 壓縮效果

由於壓縮策略集成自Luban,所以最後圖片壓縮大小前後對比可以參考Luban。

我在此基礎上,對社交產品中常見的長圖的需求進行了一定的優化。


Tags: Flora 壓縮 with 任務 算法 calculateInSampleSize

文章來源:


ads
ads

相關文章
ads

相關文章

ad