Java 使用 ImageIO 压缩大图片:高效代码示例和优化技巧

本文提供一个 Java 代码示例,使用 ImageIO 库高效压缩大图片,并解释代码逻辑,以及如何根据需要调整压缩参数。

代码示例

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageCompressor {
    public static void compress(File sourceFile, File destFile, int maxWidth, int maxHeight, float quality) throws IOException {
        BufferedImage image = ImageIO.read(sourceFile);

        int width = image.getWidth();
        int height = image.getHeight();

        if (width <= maxWidth && height <= maxHeight) {
            ImageIO.write(image, 'jpg', destFile);
            return;
        }

        float scale = Math.min((float) maxWidth / width, (float) maxHeight / height);
        int newWidth = (int) (width * scale);
        int newHeight = (int) (height * scale);

        BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
        resizedImage.createGraphics().drawImage(image.getScaledInstance(newWidth, newHeight, BufferedImage.SCALE_SMOOTH), 0, 0, null);

        ImageIO.write(resizedImage, 'jpg', destFile);
    }
}

代码使用方法

File sourceFile = new File('source.jpg');
File destFile = new File('dest.jpg');
int maxWidth = 800;
int maxHeight = 600;
float quality = 0.8f;

ImageCompressor.compress(sourceFile, destFile, maxWidth, maxHeight, quality);

代码解释

  1. 使用 ImageIO.read(sourceFile) 读取原始图片文件。
  2. 获取原始图片的宽度和高度,并判断是否需要压缩。
  3. 如果原始图片的宽度和高度都小于等于 maxWidthmaxHeight,则直接将原始图片复制到目标文件中。
  4. 否则,根据 maxWidthmaxHeight 计算缩放比例,并使用 BufferedImage.getScaledInstance() 方法对图片进行缩放。
  5. 使用 ImageIO.write(resizedImage, 'jpg', destFile) 将缩放后的图片保存到目标文件中。

优化技巧

  1. 使用 BufferedImage.TYPE_INT_RGB 作为缩放后的图片类型,可以提高压缩速度和效率。
  2. 使用 BufferedImage.SCALE_SMOOTH 作为缩放算法,可以获得更好的缩放效果。
  3. 使用 quality 参数控制压缩后的图片质量,范围为 0.0 到 1.0。

总结

本文提供了一个使用 Java ImageIO 库压缩大图片的代码示例,并解释了代码逻辑和优化技巧。通过调整压缩参数,可以根据需要获得不同程度的压缩效果。希望本文对您有所帮助。

Java 使用 ImageIO 压缩大图片:高效代码示例和优化技巧

原文地址: https://www.cveoy.top/t/topic/jxds 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录