第三方图片压缩框架: 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();
}
}