
Thumbnailator 是一个用于 Java 的缩略图生成库。
Thumbnailator 的流畅界面可以让你一步完成相当复杂的缩略图处理任务。例如,要创建目录中所有图像文件的 JPEG 缩略图,并将所有缩略图调整到最大尺寸 640 像素 x 480 像素,同时保持原始图像的宽高比,可以通过以下步骤完成:
Thumbnails.of(new File("path/to/directory").listFiles())
.size(640, 480)
.outputFormat("jpg")
.toFiles(Rename.PREFIX_DOT_THUMBNAIL);
Thumbnailator 提供的流畅接口将创建缩略图的任务简化为只需一次方法调用即可完成!
无需访问图像 I/O API 并通过 Graphics2D 对象手动操作 BufferedImage。Thumbnailator 会为您完成所有这些操作。
Thumbnails.of(new File("original.jpg"))
.size(160, 160)
.toFile(new File("thumbnail.jpg"));
在这个例子中,原始图像 original.jpg 被调整大小,然后保存为 thumbnail.jpg。
此外,Thumbnailator 也接受以字符串形式指定的文件名。无需使用 File 对象来指定图像文件。
Thumbnails.of("original.jpg")
.size(160, 160)
.toFile("thumbnail.jpg");
这种形式在编写快速原型代码时非常有用,或者在脚本语言中使用 Thumbnailator 时也很有用。
Thumbnails.of(new File("original.jpg"))
.size(160, 160)
.rotate(90)
.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("watermark.png")), 0.5f)
.outputQuality(0.8)
.toFile(new File("image-with-watermark.jpg"));
在这个例子中,原始图像 original.jpg 被调整大小,然后顺时针旋转 90 度,然后在右下角放置一个半透明的水印,最后以 80% 的压缩质量设置保存为 image-with-watermark.jpg。
OutputStream os = ...;
Thumbnails.of("large-picture.jpg")
.size(200, 200)
.outputFormat("png")
.toOutputStream(os);
在这个例子中,文件 large-picture.jpg 中的图像被调整为最大尺寸 200 x 200(保持原始图像的宽高比),并将其作为 PNG 图像写入指定的 OutputStream。
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.size(200, 200)
.asBufferedImage();
上面的代码将原始图像存储在 originalImage 中,并创建一个 200 像素 x 200 像素的缩略图,并将结果存储在 thumbnail 中。
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.scale(0.25)
.asBufferedImage();
上面的代码获取原始图像中的图像,并创建一个大小为原始图像 25% 的缩略图,并使用默认缩放技术来生成存储在 thumbnail 中的缩略图。
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.size(200, 200)
.keepAspectRatio(false)
.asBufferedImage();
or
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.forceSize(200, 200)
.asBufferedImage();
这两个示例都从 originalImage 中获取图像,并使用创建 200 像素 x 200 像素的缩略图,并将结果存储在 thumbnail 中。
注意:上一节中的示例不一定会生成指定尺寸的缩略图。要确保缩略图具有指定尺寸,请使用本节所示的
.keepAspectRatio(false)或forceSize函数。虽然这些选项始终会生成指定尺寸的缩略图,但宽高比不会被保留。这意味着缩略图最终可能会被压缩或拉伸。
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.size(200, 200)
.rotate(90)
.asBufferedImage();
上面的代码获取原始图像,并创建一个顺时针旋转 90 度的缩略图。
Thumbnails.of("path/to/image")
.crop(Positions.CENTER)
.size(100, 100)
.toFile("path/to/thumbnail");
上述代码生成一个保持原图宽高比的缩略图。超出 size 方法指定范围的图像部分会被裁剪。
例如,使用上述代码将图像从 240x200 调整为 100x100,结果如下:

图像的裁剪位置由传递给 crop 方法的 Position 参数决定。详情请参阅 crop(Position) 方法的文档。
以下页面提供了关于 Thumbnailator 功能的更多信息:
Thumbnailator 仍处于早期开发阶段,其 API 随时可能更改。
Thumbnailator 采用 MIT 许可证发布。