溫馨提示×

android photopicker 如何進行圖片壓縮

小樊
121
2024-11-30 15:01:48
欄目: 編程語言

在Android中,使用PhotoPicker選擇圖片后,可以通過以下步驟對圖片進行壓縮:

  1. 首先,確保已經在項目中添加了Glide和BitmapFactory庫的依賴。在app的build.gradle文件中添加以下代碼:
dependencies {
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
    implementation 'androidx.bitmap:bitmap:1.0.0'
}
  1. 創建一個名為ImageCompressor的工具類,用于壓縮圖片:
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class ImageCompressor {

    public static void compressImage(Context context, File imageFile, int maxWidth, int maxHeight, String outputPath) {
        try {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);

            options.inSampleSize = calculateInSampleSize(options, maxWidth, maxHeight);
            options.inJustDecodeBounds = false;
            Bitmap scaledBitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);

            FileOutputStream out = new FileOutputStream(outputPath);
            scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
        final int height = options.outHeight;
        final int width = options.outWidth;
        int inSampleSize = 1;

        if (height > reqHeight || width > reqWidth) {
            final int halfHeight = height / 2;
            final int halfWidth = width / 2;

            while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {
                inSampleSize *= 2;
            }
        }

        return inSampleSize;
    }
}
  1. 在選擇圖片后,調用ImageCompressor類的compressImage方法對圖片進行壓縮:
File imageFile = ...; // 從PhotoPicker獲取的圖片文件
String outputPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath() + "/compressed_" + System.currentTimeMillis() + ".jpg";

ImageCompressor.compressImage(context, imageFile, 1000, 1000, outputPath);

注意:在Android 6.0(API級別23)及更高版本中,需要在運行時請求存儲權限。確保在調用compressImage方法之前已經獲得了所需的權限。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女