package com.luck.picture.lib.compress; import android.content.Context; import android.util.Log; import com.yalantis.ucrop.entity.LocalMedia; import java.io.File; import java.util.ArrayList; import java.util.List; /** * author:luck * project:PictureSelector * email:893855882@qq.com * data:16/12/31 */ public class LuBanCompress implements CompressInterface { private List<LocalMedia> images; private CompressInterface.CompressListener listener; private Context context; private LubanOptions options; private ArrayList<File> files = new ArrayList<>(); public LuBanCompress(Context context, CompressConfig config, List<LocalMedia> images, CompressListener listener) { options = config.getLubanOptions(); this.images = images; this.listener = listener; this.context = context; } @Override public void compress() { if (images == null || images.isEmpty()) { listener.onCompressError(images, " images is null"); return; } for (LocalMedia image : images) { if (image == null) { listener.onCompressError(images, " There are pictures of compress is null."); return; } if (image.isCut()) { files.add(new File(image.getCutPath())); } else { files.add(new File(image.getPath())); } } if (images.size() == 1) { compressOne(); } else { compressMulti(); } } private void compressOne() { Log.i("压缩档次::", options.getGrade() + ""); Luban.compress(context, files.get(0)) .putGear(options.getGrade()) .setMaxHeight(options.getMaxHeight()) .setMaxWidth(options.getMaxWidth()) .setMaxSize(options.getMaxSize() / 1000) .launch(new OnCompressListener() { @Override public void onStart() { } @Override public void onSuccess(File file) { LocalMedia image = images.get(0); image.setCompressPath(file.getPath()); image.setCompressed(true); listener.onCompressSuccess(images); } @Override public void onError(Throwable e) { listener.onCompressError(images, e.getMessage() + " is compress failures"); } }); } private void compressMulti() { Log.i("压缩档次::", options.getGrade() + ""); Luban.compress(context, files) .putGear(options.getGrade()) .setMaxSize( options.getMaxSize() / 1000) // limit the final image size(unit:Kb) .setMaxHeight(options.getMaxHeight()) // limit image height .setMaxWidth(options.getMaxWidth()) .launch(new OnMultiCompressListener() { @Override public void onStart() { } @Override public void onSuccess(List<File> fileList) { handleCompressCallBack(fileList); } @Override public void onError(Throwable e) { listener.onCompressError(images, e.getMessage() + " is compress failures"); } }); } private void handleCompressCallBack(List<File> files) { for (int i = 0, j = images.size(); i < j; i++) { String path = files.get(i).getPath();// 压缩成功后的地址 LocalMedia image = images.get(i); // 如果是网络图片则不压缩 if (path != null && path.startsWith("http")) { image.setCompressPath(""); } else { image.setCompressed(true); image.setCompressPath(path); } } listener.onCompressSuccess(images); } }