首先需要引入RxJava和RxAndroid
compile ‘io.reactivex.rxjava2:rxjava:2.1.7’
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
/**
-
使用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() {
@Override
public void accept(File file) {
Glide.with(CompressorActivity.this)
.load(file)
.into(mImageNew);
mText.setText(“压缩后大小” + FileUtils.getDataSize(file.length()));//170.27KB
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) {
throwable.printStackTrace();
mText.setText(“压缩失败了”);
}
});
}
总结:
1、LuBan的优点:LuBan压缩方法在默认的情况下,压缩比要比Compressor要高,同时压缩的对象丰富,(包括file,path,List),可以传入多张图片集合直接进行压缩等。
2、Compressor的优点,返回的对象相对丰富,可以返回File或者BitMap,同时Compressor可以自定义压缩比例,定制化比较高等。
LuBan的gitHub地址:https://github.com/Curzibn/Luban
Compressor的gitHub地址:https://github.com/zetbaitsu/Compressor
整个测试源码:
package tsou.cn.lubancompressor;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import id.zelory.compressor.Compressor;
import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
public class CompressorActivity extends AppCompatActivity {
private ImageView mImageOld;
private ImageView mImageNew;
private static final String TYPE = “type”;
public static final int REQUEST_PICK_IMAGE = 11101;
String[] mPermissionList = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE};
private int type;
/**
- LuBanCompressor
*/
private TextView mText;
public static void acti