2025-07-05-java图片工具thumbnailator使用
2025/7/5大约 2 分钟
一 thumbnailator简介
Thumbnailator 是一个高效、易用的 Java 图像处理库,支持缩放、裁剪、旋转、水印等功能,无需复杂代码即可生成高质量缩略图,比JDK自带的图片处理功能要强大很多,可以满足90%的图片处理需求。
特点:
- 简洁 API(链式调用)
- 支持 JPEG、PNG、GIF 等格式
- 高性能处理(多线程优化)
- 无外部依赖(仅需 Java 标准库)
二 环境配置
使用上非常简单,引入依赖即可。
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.20</version> <!-- 最新版 -->
</dependency>
最新版可以访问https://mvnrepository.com/查询。
三 具体使用场景
3.1 基本缩放
3.1.1 指定尺寸缩放(保持比例)
Thumbnails.of("input.jpg")
.size(200, 200) // 默认是保持比例进行缩放,宽200,高200,自己测试发现是按照高度进行按比例缩放的
.toFile("output.jpg");
3.1.2 强制指定尺寸(不保持比例)
Thumbnails.of("i:\\tmp\\2.jpg")
.forceSize(2000,2000) // 使用forceSize强制指定宽高,忽略原文件的比例
.toFile("i:\\tmp2\\2-1.jpg");
也可以使用
Thumbnails.of("i:\\tmp\\2.jpg")
.size(2000,2000)
.keepAspectRatio(false) //忽略原文件的比例
.toFile("i:\\tmp2\\2-1.jpg");
3.1.3 按比例缩放
Thumbnails.of("i:\\tmp\\2.jpg")
.scale(2) //指定缩放倍数,注意,是按比例的
.toFile("i:\\tmp2\\2-1.jpg");
3.2 图片裁剪
Thumbnails.of("i:\\tmp\\2.jpg")
.sourceRegion(Positions.CENTER, 200, 200) //从中心裁剪200x200的区域
.size(500,400) //缩放至某个尺寸
.toFile("i:\\tmp2\\2-1.jpg");
3.3 旋转图片
Thumbnails.of("i:\\tmp\\2.jpg")
.scale(1)
.rotate(90) //旋转90度
.toFile("i:\\tmp2\\2-1.jpg");
3.4 添加水印
BufferedImage watermark = ImageIO.read(new File("i:\\tmp2\\3-1.jpg")); //先生成一个水印
Thumbnails.of("i:\\tmp\\2.jpg")
// .size(600,600)
.scale(1)
.watermark(Positions.BOTTOM_RIGHT,watermark,0.5f) //放到右下角,50%透明度
.toFile("i:\\tmp2\\2-1.jpg");
3.5 格式转换与质量控制
Thumbnails.of("i:\\tmp\\2.jpg")
.size(600,600) 缩放到指定大小
// .scale(1)
.outputFormat("png") 输出为png格式
.outputQuality(0.2) 质量压缩比例,0-1之间,越大表示质量越好
.toFile("i:\\tmp2\\2-1.png");
3.6 批量处理
Thumbnails.of(new File("i:\\tmp").listFiles())
.size(200, 200)
.toFiles(Rename.SUFFIX_DOT_THUMBNAIL); //批量处理后重新命名
3.7 png转换成jpeg格式
Thumbnails.of("i:\\tmp\\png.png")
// .size(600,600)
.scale(1)
.imageType(BufferedImage.TYPE_INT_RGB) //忽略alpha通道,用白色进行填充
.outputFormat("jpg")
.toFile("i:\\tmp2\\png.jpeg");
3.8 png图片压缩
<dependency>
<groupId>org.jpedal</groupId>
<artifactId>OpenViewerFX</artifactId>
<version>6.6.14</version>
</dependency>
PngCompressor.compress(new File("i:\\tmp\\按词生成图片-1.png"), new File("i:\\tmp\\按词生成图片-1-little.png"));
4MB的png图片压缩后大小为1M左右。