Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java压缩图片至指定大小


在 Java 中,可以使用不同的方式来压缩图片以达到指定的大小。下面将介绍两种常用的方式:使用 Java 标准库和使用第三方库 ImageIO,以及使用第三方库 Thumbnails。每种方式都会包括详细的步骤流程和相应的代码示例。

使用 Java 标准库和 ImageIO

步骤流程:

  1. 读取原始图片。
  2. 使用缓冲流读取图片数据。
  3. 设置压缩参数,如压缩质量。
  4. 将压缩后的图片数据写入输出文件。

示例代码:

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

public class ImageCompression {

    public static void compressImage(File inputImage, File outputImage, float quality) throws IOException {
        BufferedImage image = ImageIO.read(inputImage);

        // Create a ByteArrayOutputStream to hold the compressed image data
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        // Get the ImageIO writer for JPEG format
        ImageWriter writer = ImageIO.getImageWritersByFormatName("jpeg").next();

        // Set the compression quality parameter
        ImageWriteParam params = writer.getDefaultWriteParam();
        params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        params.setCompressionQuality(quality);

        // Write the compressed image data to the ByteArrayOutputStream
        ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(outputStream);
        writer.setOutput(imageOutputStream);
        writer.write(null, new IIOImage(image, null, null), params);

        // Write the compressed data to the output file
        try (OutputStream fileOutputStream = new FileOutputStream(outputImage)) {
            outputStream.writeTo(fileOutputStream);
        }

        // Clean up resources
        writer.dispose();
        imageOutputStream.close();
    }

    public static void main(String[] args) throws IOException {
        File inputImage = new File("input.jpg");
        File outputImage = new File("output_compressed.jpg");
        float compressionQuality = 0.5f; // Adjust the quality as needed

        compressImage(inputImage, outputImage, compressionQuality);
    }
}

使用第三方库 Thumbnails

步骤流程:

  1. 引入 Thumbnails 库的依赖。
  2. 使用 Thumbnails 库加载原始图片。
  3. 设置压缩参数,如压缩质量和尺寸。
  4. 输出压缩后的图片。

Maven 依赖:

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.14</version>
</dependency>

Gradle 依赖:

implementation 'net.coobird:thumbnailator:0.4.14'

示例代码:

import net.coobird.thumbnailator.Thumbnails;

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

public class ThumbnailCompression {

    public static void compressImage(File inputImage, File outputImage, double scale, float quality) throws IOException {
        Thumbnails.of(inputImage)
            .scale(scale)
            .outputQuality(quality)
            .toFile(outputImage);
    }

    public static void main(String[] args) throws IOException {
        File inputImage = new File("input.jpg");
        File outputImage = new File("output_thumbnail.jpg");
        double scale = 0.5; // Scale down to 50%
        float compressionQuality = 0.5f; // Adjust the quality as needed

        compressImage(inputImage, outputImage, scale, compressionQuality);
    }
}

这两种方法都可以用来压缩图片至指定大小,具体的实现选择取决于你的项目需求和偏好。

###方式一:使用Java原生库ImageIO步骤流程:1.示例代码:依赖坐标(Maven):依赖坐标(Gradle):###方式三:使用第 ...
在Java中压缩字符串有多种实现方式,其中常用的方式包括使用GZIP压缩和使用Deflater压缩。以上就是使用GZIP和Deflater两 ...
示例代码:###方法二:使用ApacheCommonsCompress库步骤流程:1.创建一个ArchiveOutputStream对象(Z ...
在Java中,要比较两个对象的大小通常需要实现`Comparable`接口或使用`Comparator`。示例代码:第三方库依赖:无###使 ...
下面我将介绍两种常用的实现方式:使用GZIP压缩和使用Deflate压缩。以下是实现的步骤:导入必要的库:在你的Maven项目中,需要在`p ...