java如何压缩照片
Java 压缩照片的方法
使用 Java 内置的 ImageIO 和 BufferedImage
通过 ImageIO 读取图片,使用 BufferedImage 调整尺寸和质量,再重新写入文件。
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageCompressor {
public static void compressImage(String inputPath, String outputPath, float quality) throws IOException {
File inputFile = new File(inputPath);
BufferedImage inputImage = ImageIO.read(inputFile);
int scaledWidth = (int) (inputImage.getWidth() * 0.5);
int scaledHeight = (int) (inputImage.getHeight() * 0.5);
BufferedImage outputImage = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = outputImage.createGraphics();
g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
g2d.dispose();
ImageIO.write(outputImage, "jpg", new File(outputPath));
}
}
使用第三方库 Thumbnailator
Thumbnailator 是一个简化图片处理的 Java 库,支持缩放和质量调整。
import net.coobird.thumbnailator.Thumbnails;
public class ThumbnailatorExample {
public static void compressImage(String inputPath, String outputPath) throws IOException {
Thumbnails.of(inputPath)
.scale(0.5) // 缩放比例
.outputQuality(0.8) // 输出质量(0.0-1.0)
.toFile(outputPath);
}
}
使用 Java 高级图像处理库 imgscalr
imgscalr 提供更简单的 API 进行图片缩放和压缩。
import org.imgscalr.Scalr;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImgscalrExample {
public static void compressImage(String inputPath, String outputPath) throws IOException {
BufferedImage originalImage = ImageIO.read(new File(inputPath));
BufferedImage scaledImage = Scalr.resize(originalImage, Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC, 800, 600);
ImageIO.write(scaledImage, "jpg", new File(outputPath));
}
}
使用 Java 的 JPEG 编码参数调整质量
通过 ImageWriteParam 设置 JPEG 压缩质量。

import javax.imageio.*;
import javax.imageio.stream.*;
import java.awt.image.*;
import java.io.*;
import java.util.Iterator;
public class JPEGQualityExample {
public static void compressImage(String inputPath, String outputPath, float quality) throws IOException {
BufferedImage image = ImageIO.read(new File(inputPath));
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer = writers.next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality);
FileOutputStream out = new FileOutputStream(outputPath);
ImageOutputStream ios = ImageIO.createImageOutputStream(out);
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null), param);
ios.close();
out.close();
writer.dispose();
}
}
注意事项
- 压缩比例和质量参数(0.0-1.0)需要根据实际需求调整。
- 第三方库如 Thumbnailator 和 imgscalr 需通过 Maven 或 Gradle 引入依赖。
- 大尺寸图片处理时需注意内存占用,建议分批处理或使用流式操作。






