第三方圖片壓縮框架: Compressor
使用步驟
- 導入依賴
implementation 'id.zelory:compressor:2.1.0'
- 調用壓縮方法
/**
* 使用Compressor RxJava模式壓縮
*
* @param path 需要壓縮的圖片
*/
private void initCompressorRxJava(String path) {
new Compressor(this)
.compressToFileAsFlowable(new File(path))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<File>() {
@Override
public void accept(File file) {
//返回的圖片為file
//圖片顯示
image.setImageBitmap(BitmapFactory.decodeFile(file.getPath()));
Log.d(TAG, "accept: "+"壓縮后大小" + FileUtils.getFileSize(file.length()));
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) {
throwable.printStackTrace();
DisplayToast("壓縮失敗了");
}
});
}
3.自定義壓縮比例
/**
* 使用Compressor IO模式自定義壓縮
*
* @param path
*.setMaxWidth(640).setMaxHeight(480)這兩個數值越高,壓縮力度越小,圖片也不清晰
*.setQuality(75)這個方法只是設置圖片質量,并不影響壓縮圖片的大小KB
*.setCompressFormat(Bitmap.CompressFormat.WEBP) WEBP圖片格式是Google推出的 壓縮強,質量 高,但是IOS不識別,需要把圖片轉為字節流然后轉PNG格式
.setCompressFormat(Bitmap.CompressFormat.PNG)PNG格式的壓縮,會導致圖片變大,并耗過大的內 存,手機反應緩慢
.setCompressFormat(Bitmap.CompressFormat.JPEG)JPEG壓縮;壓縮速度比PNG快,質量一般,基本上屬于1/10的壓縮比例
*
*/
private void initCompressorIO(String path) {
try {
File file = new Compressor(this)
.setMaxWidth(640)
.setMaxHeight(480)
.setQuality(75)
.setCompressFormat(Bitmap.CompressFormat.WEBP)
.setDestinationDirectoryPath(FileUtils.createFile(this))
.compressToFile(new File(path));
Glide.with(CompressorActivity.this)
.load(file)
.into(mImageNew);
mText.setText("壓縮后大小" + FileUtils.getDataSize(file.length()));//32.64KB
} catch (IOException e) {
e.printStackTrace();
}
}