Java 原生圖片處理 API 繁瑣且效果一般,Thumbnailator 提供了極簡的鏈式 API,兩三行代碼即可完成縮放、裁剪、水印、旋轉、格式轉換等操作,效果遠超原生 API,且持續維護更新。
原圖:

// size(寬, 高) - 保持比例縮放至指定矩形範圍內
Thumbnails.of("images/a380_1280x1024.jpg")
.size(200, 300)
.toFile("c:/a380_200x300.jpg");
結果:

// scale(比例) - 0.5 為縮小一半,2 為放大兩倍
Thumbnails.of("images/a380_1280x1024.jpg")
.scale(0.5f)
.toFile("c:/a380_half.jpg");
// sourceRegion(x, y, 寬, 高) - 裁剪指定區域
Thumbnails.of("images/a380_1280x1024.jpg")
.sourceRegion(600, 500, 400, 400)
.size(200, 200)
.toFile("c:/a380_crop.jpg");
// rotate(角度) - 正數順時針,負數逆時針
Thumbnails.of("images/a380_1280x1024.jpg")
.rotate(90)
.toFile("c:/a380_rotated.jpg");
// watermark(位置, 水印圖, 透明度)
Thumbnails.of("images/a380_1280x1024.jpg")
.watermark(Positions.BOTTOM_RIGHT,
ImageIO.read(new File("images/watermark.png")),
0.5f)
.toFile("c:/a380_watermarked.jpg");
水印效果:


// outputFormat(格式) - 支持 jpg, png, gif, bmp 等
Thumbnails.of("images/a380_1280x1024.jpg")
.size(1280, 1024)
.outputFormat("png")
.toFile("c:/a380_1280x1024.png");
Thumbnails.of("images/a380_1280x1024.jpg")
.size(1280, 1024)
.outputFormat("gif")
.toFile("c:/a380_1280x1024.gif");
OutputStream os = new FileOutputStream("c:/a380_stream.png");
Thumbnails.of("images/a380_1280x1024.jpg")
.size(1280, 1024)
.toOutputStream(os);
BufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg")
.size(1280, 1024)
.asBufferedImage();
ImageIO.write(thumbnail, "jpg", new File("c:/a380_buffered.jpg"));
Thumbnails.of(directory).size(100,100).toFiles(Rename.NO_CHANGE).outputQuality(0.8f) 平衡體積與清晰度