Browse Source

增加上传头像压缩功能

Pq 2 years ago
parent
commit
d729822d9a

+ 1 - 0
BaseLibrary/build.gradle

@@ -189,6 +189,7 @@ dependencies {
     }
     api "com.github.Jay-Goo:RangeSeekBar:v3.0.0"
     implementation 'com.airbnb.android:lottie:5.0.3'
+    implementation 'top.zibin:Luban:1.1.8'
     //UI适配
 //    api 'me.jessyan:autosize:1.2.1'
 }

+ 9 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/FileUtils.java

@@ -1739,4 +1739,13 @@ public final class FileUtils {
             e.printStackTrace();
         }
     }
+
+    public static String getCompressPath() {
+        String compressPath = getCacheDir(Utils.getApp()) + File.separator + "compress";
+        File file = new File(compressPath);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        return compressPath;
+    }
 }

+ 52 - 4
student/src/main/java/com/cooleshow/student/ui/mine/PersonalSettingActivity.java

@@ -38,6 +38,10 @@ import com.cooleshow.student.contract.PersonalSettingContract;
 import com.cooleshow.student.databinding.ActivityPersonalSettingBinding;
 import com.cooleshow.student.presenter.mine.PersonalSettingPresenter;
 import com.cooleshow.usercenter.bean.SetDetailBean;
+import com.luck.picture.lib.compress.CompressionPredicate;
+import com.luck.picture.lib.compress.Luban;
+import com.luck.picture.lib.compress.OnCompressListener;
+import com.luck.picture.lib.entity.LocalMedia;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 
 import org.json.JSONException;
@@ -47,8 +51,10 @@ import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
 
 import io.rong.imkit.utils.StatusBarUtil;
 
@@ -423,8 +429,8 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
             } else {
                 viewBinding.tvBirthday.setText(setDetailBean.birthdate);
             }
-            mySetDetailBean.birthdate=setDetailBean.birthdate;
-        }else{
+            mySetDetailBean.birthdate = setDetailBean.birthdate;
+        } else {
             viewBinding.tvBirthday.setText("");
         }
         ToastUtil.getInstance().showShort("修改成功");
@@ -468,7 +474,7 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
             } else if (requestCode == REQUEST_CODE_CAMERA) {
                 boolean isImg = MyFileUtils.isImg(imagePath);
                 if (isImg) {
-                    presenter.upLoadImage(PersonalSettingActivity.this, imagePath);
+                    compressImg(imagePath);
                 } else {
                     ToastUtil.getInstance().showShort("请选择图片类型文件");
                 }
@@ -479,7 +485,7 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
                         String v_path = FileUtils.getFilePathForN(selectedImage, PersonalSettingActivity.this);
                         boolean isImg = MyFileUtils.isImg(v_path);
                         if (isImg) {
-                            presenter.upLoadImage(PersonalSettingActivity.this, v_path);
+                            compressImg(v_path);
                         } else {
                             ToastUtil.getInstance().showShort("请选择图片类型文件");
                         }
@@ -488,4 +494,46 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
             }
         }
     }
+
+    private void compressImg(String filePath) {
+        LocalMedia localMedia = new LocalMedia();
+        localMedia.setPath(filePath);
+        ArrayList<LocalMedia> list = new ArrayList<>();
+        list.add(localMedia);
+        Luban.with(this)
+                .loadMediaData(list)
+                .ignoreBy(100)
+                .setTargetDir(FileUtils.getCompressPath())
+                .filter(new CompressionPredicate() {
+                    @Override
+                    public boolean apply(String path) {
+                        return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"));
+                    }
+                })
+                .setCompressListener(new OnCompressListener() {
+                    @Override
+                    public void onStart() {
+                        // TODO 压缩开始前调用,可以在方法内启动 loading UI
+                        showLoading();
+                    }
+
+                    @Override
+                    public void onSuccess(List<LocalMedia> list) {
+                        hideLoading();
+                        // TODO 压缩成功后调用,返回压缩后的图片文件
+                        for (int i = 0; i < list.size(); i++) {
+                            LocalMedia localMedia = list.get(i);
+                            String compressPath = localMedia.getCompressPath();
+                            presenter.upLoadImage(PersonalSettingActivity.this, compressPath);
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        e.printStackTrace();
+                        hideLoading();
+                        ToastUtil.getInstance().showShort("上传失败,请重新选择");
+                    }
+                }).launch();
+    }
 }

+ 50 - 2
teacher/src/main/java/com/cooleshow/teacher/ui/mine/PersonalSettingActivity.java

@@ -32,6 +32,10 @@ import com.cooleshow.teacher.contract.PersonalSettingContract;
 import com.cooleshow.teacher.databinding.ActivityPersonalSettingBinding;
 import com.cooleshow.teacher.presenter.mine.PersonalSettingPresenter;
 import com.cooleshow.usercenter.bean.SetDetailBean;
+import com.luck.picture.lib.compress.CompressionPredicate;
+import com.luck.picture.lib.compress.Luban;
+import com.luck.picture.lib.compress.OnCompressListener;
+import com.luck.picture.lib.entity.LocalMedia;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 
 import org.json.JSONException;
@@ -39,6 +43,8 @@ import org.json.JSONObject;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 import io.rong.imkit.utils.StatusBarUtil;
 
@@ -343,7 +349,7 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
                 if (!TextUtils.isEmpty(imagePath)) {
                     boolean isImg = MyFileUtils.isImg(imagePath);
                     if (isImg) {
-                        presenter.upLoadImage(PersonalSettingActivity.this, imagePath);
+                        compressImg(imagePath);
                     } else {
                         ToastUtil.getInstance().showShort("请选择图片类型文件");
                     }
@@ -356,7 +362,7 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
                         String v_path = FileUtils.getFilePathForN(selectedImage, PersonalSettingActivity.this);
                         boolean isImg = MyFileUtils.isImg(v_path);
                         if (isImg) {
-                            presenter.upLoadImage(PersonalSettingActivity.this, v_path);
+                            compressImg(v_path);
                         } else {
                             ToastUtil.getInstance().showShort("请选择图片类型文件");
                         }
@@ -365,4 +371,46 @@ public class PersonalSettingActivity extends BaseMVPActivity<ActivityPersonalSet
             }
         }
     }
+
+    private void compressImg(String filePath) {
+        LocalMedia localMedia = new LocalMedia();
+        localMedia.setPath(filePath);
+        ArrayList<LocalMedia> list = new ArrayList<>();
+        list.add(localMedia);
+        Luban.with(this)
+                .loadMediaData(list)
+                .ignoreBy(100)
+                .setTargetDir(FileUtils.getCompressPath())
+                .filter(new CompressionPredicate() {
+                    @Override
+                    public boolean apply(String path) {
+                        return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"));
+                    }
+                })
+                .setCompressListener(new OnCompressListener() {
+                    @Override
+                    public void onStart() {
+                        // TODO 压缩开始前调用,可以在方法内启动 loading UI
+                        showLoading();
+                    }
+
+                    @Override
+                    public void onSuccess(List<LocalMedia> list) {
+                        hideLoading();
+                        // TODO 压缩成功后调用,返回压缩后的图片文件
+                        for (int i = 0; i < list.size(); i++) {
+                            LocalMedia localMedia = list.get(i);
+                            String compressPath = localMedia.getCompressPath();
+                            presenter.upLoadImage(PersonalSettingActivity.this, compressPath);
+                        }
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+                        e.printStackTrace();
+                        hideLoading();
+                        ToastUtil.getInstance().showShort("上传失败,请重新选择");
+                    }
+                }).launch();
+    }
 }