Android 圖片壓縮
阿新 • • 發佈:2021-10-03
新增Luban庫 庫地址:
//https://github.com/Curzibn/Luban
implementation 'top.zibin:Luban:1.1.8' //https://github.com/Curzibn/Luban
使用方法:
package com.example.sniffapplication.Utils; import android.content.Context; import android.net.Uri; import android.text.TextUtils; import java.io.File; import java.util.List; importtop.zibin.luban.CompressionPredicate; import top.zibin.luban.Luban; import top.zibin.luban.OnCompressListener; public class ImageUtil { //圖片壓縮 public static void Compression(Context content, Uri uri, OnCompressListener compressListener) { String path= FileUtil.getFilePathFromURI(content,uri); Luban.with(content) .load(path) .ignoreBy(100) .setTargetDir(getPath(content)) .setCompressListener(compressListener).launch(); } private static String getPath(Context content) { return content.getCacheDir().getPath(); } }
private void CompressionImage(Uri uri, int imageIndex) { String realFileName= FileUtil.getFileRealNameFromUri(this, uri); ImageUtil.Compression(this, uri, new OnCompressListener() { @Override public void onStart() { // TODO 壓縮開始前呼叫,可以在方法內啟動 loading UI } @Override public void onSuccess(File file) { runOnUiThread(new Runnable() { @Override public void run() { // TODO 壓縮成功後呼叫,返回壓縮後的圖片檔案 UploadImage(file.getPath(), imageIndex,realFileName); } }); } @Override public void onError(Throwable e) { e.printStackTrace(); // TODO 當壓縮過程出現問題時呼叫 } }); }
public static String getFilePathFromURI(Context context, Uri contentUri) { File rootDataDir = context.getExternalFilesDir(null); // MyApplication.getMyContext().getExternalFilesDir(null).getPath(); String fileName = getFileName(contentUri); if (!TextUtils.isEmpty(fileName)) { File copyFile = new File(rootDataDir + File.separator + fileName); copyFile(context, contentUri, copyFile); return copyFile.getAbsolutePath(); } return null; }
注意事項:load需要傳入絕對路徑 如果傳入的是
android.net.Uri 壓縮成功後返回的是一個空的File