1. 程式人生 > 其它 >Android 圖片壓縮

Android 圖片壓縮

新增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;

import
top.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