java如何裁剪图片
使用 Java 原生库裁剪图片
Java 提供了 BufferedImage 和 Graphics2D 类用于图片裁剪。以下是核心代码示例:
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageCropper {
public static void cropImage(String srcPath, String destPath, int x, int y, int width, int height) throws Exception {
BufferedImage originalImage = ImageIO.read(new File(srcPath));
BufferedImage croppedImage = originalImage.getSubimage(x, y, width, height);
ImageIO.write(croppedImage, "jpg", new File(destPath));
}
}
调用示例:
cropImage("input.jpg", "output.jpg", 100, 100, 300, 300); // 从(100,100)开始裁剪300x300区域
使用第三方库 Thumbnailator
Thumbnailator 库提供了更简洁的 API:
import net.coobird.thumbnailator.Thumbnails;
Thumbnails.of("original.jpg")
.sourceRegion(100, 100, 300, 300) // x,y,width,height
.size(300, 300) // 输出尺寸
.toFile("cropped.jpg");
处理透明背景图片
当处理 PNG 等带透明通道的图片时,需要保留 alpha 通道:

BufferedImage original = ImageIO.read(new File("input.png"));
BufferedImage cropped = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = cropped.createGraphics();
g.drawImage(original, 0, 0, width, height, x, y, x+width, y+height, null);
g.dispose();
ImageIO.write(cropped, "png", new File("output.png"));
异常处理建议
图片处理时应添加以下异常处理:
IllegalArgumentException:当裁剪区域超出原图范围时抛出IOException:文件读写异常NullPointerException:图片加载失败时可能抛出
性能优化方案
处理大图时可考虑:

-
使用
ImageIO.setUseCache(false)禁用磁盘缓存 -
对 JPEG 图片指定压缩质量:
JPEGImageWriteParam jpegParams = new JPEGImageWriteParam(null); jpegParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); jpegParams.setCompressionQuality(0.9f); // 0-1质量系数 -
批量处理时复用
BufferedImage对象减少内存分配






