emmm...不管怎么說(shuō)飞涂,我也寫(xiě)了一個(gè)圖片壓縮框架。
在Luban的算法策略上祈搜,我豐富了外圍的api较店,提供更多的可配參數(shù),多線(xiàn)程壓縮和不同細(xì)粒度的任務(wù)控制容燕。
項(xiàng)目地址
https://github.com/ghnor/Flora
依賴(lài)
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();
可控的壓縮任務(wù)
Flora.with(Activity)
Flora.with(FragmentActivity)
Flora.with(Fragment)
Flora.with(SupportFragment)
// 上面的四類(lèi)梁呈,會(huì)自動(dòng)在頁(yè)面生命周期結(jié)束后,終止壓縮任務(wù)蘸秘。
// 通過(guò)TAG標(biāo)志位來(lái)結(jié)束一系列的任務(wù)官卡。
Flora.with(TAG)
// 強(qiáng)制結(jié)束任務(wù)。
Flora.cancel(TAG);
// 無(wú)參醋虏,此時(shí)的任務(wù)進(jìn)行其實(shí)是不受控的寻咒,強(qiáng)烈建議不要采用這種寫(xiě)法。
Flora.with()
更多屬性
Flora.with()
// 配置inSample和quality的算法颈嚼,內(nèi)置了一套基于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);
}
})
// 對(duì)壓縮后的圖片做個(gè)性化地處理仔涩,如:添加水印
.addDecoration(new Decoration() {
@Override
public Bitmap onDraw(Bitmap bitmap) {
return super.onDraw(bitmap);
}
})
// 配置Bitmap的色彩格式
.bitmapConfig(Bitmap.Config.RGB_565)
// 最大文件尺寸,不建議配置此項(xiàng)粘舟,目前采用的方式是重復(fù)寫(xiě)入文件,判斷大小佩研,比較耗時(shí)
.maxFileSize(1.0)
// 同時(shí)可進(jìn)行的最大壓縮任務(wù)數(shù)量
.compressTaskNum(1)
// 安全內(nèi)存柑肴,設(shè)置為2,表示此次壓縮任務(wù)需要的內(nèi)存小于1/2可用內(nèi)存才進(jìn)行壓縮任務(wù)
.safeMemory(2)
// 壓縮完成的圖片在磁盤(pán)的存儲(chǔ)目錄
.diskDirectory(File)
.load(source...)
.compress();
其他
- 壓縮速度
本身內(nèi)部采用線(xiàn)程池的方案去進(jìn)行壓縮任務(wù)旬薯,同時(shí)進(jìn)行了必要的內(nèi)存檢查晰骑。
在不會(huì)OOM的前提下,最大的提升了壓縮的速度,常見(jiàn)的9圖大小在20M+能夠在2s內(nèi)處理完成硕舆。
當(dāng)然秽荞,機(jī)器性能,系統(tǒng)當(dāng)時(shí)的內(nèi)存都是對(duì)此產(chǎn)生影響抚官,我的測(cè)試機(jī)是【魅藍(lán)Note】...
- 壓縮效果
由于壓縮策略集成自L(fǎng)uban扬跋,所以最后圖片壓縮大小前后對(duì)比可以參考Luban。
我在此基礎(chǔ)上凌节,對(duì)社交產(chǎn)品中常見(jiàn)的長(zhǎng)圖的需求進(jìn)行了一定的優(yōu)化钦听。