Android 图片压缩到指定宽高的实现方法

1. 简介

在Android开发中,经常会遇到需要对图片进行压缩的情况,特别是在处理大图时,为了避免内存溢出和提高加载速度,我们需要将图片压缩到指定的宽度和高度。本文将介绍一种实现方法,帮助刚入门的开发者学会如何在Android中实现图片压缩到指定宽高。

2. 实现步骤

下面是实现图片压缩到指定宽高的步骤表格:

flowchart TD
    A[选择图片] --> B[获取图片的原始宽高]
    B --> C[计算压缩比例]
    C --> D[按比例压缩图片]
    D --> E[保存压缩后的图片]

步骤解析:

  1. 选择图片:首先用户需要选择要压缩的图片,可以通过调用系统相册或者拍照功能来获取图片。
  2. 获取图片的原始宽高:我们需要获取选中图片的原始宽度和高度,以便后续的压缩计算。
  3. 计算压缩比例:根据指定的宽度和高度,以及原始宽度和高度,计算出压缩比例。
  4. 按比例压缩图片:根据计算得到的压缩比例,对图片进行压缩处理。
  5. 保存压缩后的图片:将压缩后的图片保存到指定的路径或者显示在界面上。

3. 代码实现

3.1 获取图片的原始宽高

首先,我们需要获取选中图片的原始宽度和高度,可以通过以下代码实现:

// 获取选中图片的原始宽度和高度
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
int imageWidth = options.outWidth;
int imageHeight = options.outHeight;

这段代码中,我们使用了 BitmapFactory.Options 类的 inJustDecodeBounds 属性,将其设置为 true,即只获取图片的宽度和高度,而不加载整个图片。通过 decodeFile 方法解析图片文件,将宽度和高度存储在 options 对象的 outWidth 和 outHeight 属性中。

3.2 计算压缩比例

接下来,我们需要根据指定的宽度和高度,以及原始宽度和高度,计算出压缩比例。可以使用以下代码实现:

// 计算压缩比例
int scaleFactor = Math.min(imageWidth / targetWidth, imageHeight / targetHeight);

这段代码中,我们使用 Math.min 方法计算出原始宽度和高度与目标宽度和高度的比例,然后取其中的最小值,作为压缩比例。

3.3 按比例压缩图片

有了压缩比例后,我们可以按照比例对图片进行压缩处理。以下是一个示例代码:

// 按比例压缩图片
options.inJustDecodeBounds = false;
options.inSampleSize = scaleFactor;
Bitmap compressedBitmap = BitmapFactory.decodeFile(filePath, options);

这段代码中,我们将之前获取到的 options 对象的 inJustDecodeBounds 属性设置为 false,以便加载整个图片。然后,将之前计算得到的 scaleFactor 值赋给 options 对象的 inSampleSize 属性,表示按照该比例进行压缩。最后,通过 decodeFile 方法解析图片文件,得到压缩后的 Bitmap 对象。

3.4 保存压缩后的图片

最后,我们可以将压缩后的图片保存到指定的路径或者显示在界面上。以下是保存图片到指定路径的示例代码:

// 保存压缩后的图片
FileOutputStream outputStream = new FileOutputStream(outputPath);
compressedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
outputStream.flush();
outputStream.close();

这段代码中,我们创建一个 FileOutputStream 对象,指定图片保存的路径。