【摘要】 Thumbnailator 是一个用于 Java 的缩略图生成库。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。
1、为什么使用 Thumbnailator
用Java制作高质量的缩略图是一项相当困难的任务。
学习如何使用图像I/O API, Java 2D API,图像处理,图像缩放技术,…但是不要害怕!Thumbnailator会为你照顾所有这些…
Thumbnailator 是一个用于 Java 的缩略图生成库。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。
1、为什么使用 Thumbnailator
用Java制作高质量的缩略图是一项相当困难的任务。
学习如何使用图像I/O API, Java 2D API,图像处理,图像缩放技术,…但是不要害怕!Thumbnailator会为你照顾所有这些事情!
Thumbnailator是一个单独的JAR文件,不依赖于外部库,这使得开发和部署变得简单和容易。它也可以在Maven中央存储库中获得,以便于在 Maven 项目中包含。
2、Thumbnailator 有多简单?
Thumbnailator 的流畅界面可用于在一个简单的步骤中执行相当复杂的缩略图处理任务。
例如,在一个目录中创建JPEG缩略图的图像文件,所有的大小调整为最大的640像素× 480像素,同时保持原始图像的高宽比,可以通过以下方法执行:
Thumbnails.of(new File("path/to/directory").listFiles()) .size(640, 480) .outputFormat("jpg") .toFiles(Rename.PREFIX_DOT_THUMBNAIL);
Thumbnailator提供的流畅接口简化了将缩略图转换为单个方法调用的任务!
不需要访问图像 I/O API,并通过Graphics2D对象手动操作 buffereimages。Thumbnailator 会为你做这些。
3、Thumbnailator 特性
- 从现有图像创建高质量的缩略图。
- 选项嵌入水印(如标志)在缩略图。
- 水印的透明度可从透明(0%)到不透明(100%)进行调节。
- 支持缩略图的旋转。
- 一个流畅的界面,以简化程序制作缩略图的过程。
例如,前面旋转缩略图示例中的代码如下所示:
for (int i : new int[] {0, 90, 180, 270, 45}) { Thumbnails.of(new File("coobird.png")) .size(100, 100) .rotate(i) .toFile(new File("image-rotated-" + i + ".png"));
}
- 多种质量模式的缩略图生成。
- 保留的长宽比的结果缩略图。
4、Thumbnailator 示例
4.1 从图像文件创建缩略图
Thumbnails.of(new File("original.jpg")) .size(160, 160) .toFile(new File("thumbnail.jpg"));
在这个例子中,原始jpg中的图像被调整大小,然后保存为 thumbnail.jpg
。
或者,Thumbnailator
将接受文件名作为字符串。不需要使用 File
对象来指定图像文件:
Thumbnails.of("original.jpg") .size(160, 160) .toFile("thumbnail.jpg");
当编写快速原型代码时,或者当从脚本语言使用 Thumbnailator
时,这个表单很有用。
4.2 创建一个带有旋转和水印的缩略图
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"));
在这个例子中,原始jpg的图像被调整大小,然后顺时钟旋转 90 度,然后水印被放置在右下角,这是半透明的,然后被保存到 image-with-watermark.jpg
与 80% 压缩质量设置。
4.3 创建一个缩略图并写入一个输出流
OutputStream os = ...; Thumbnails.of("large-picture.jpg") .size(200, 200) .outputFormat("png") .toOutputStream(os);
在这个例子中,来自文件 large-picture.jpg
的图像被调整为最大尺寸 200 x 200(保持原始图像的高宽比)
,并将其作为PNG图像写入指定的 OutputStream
。
4.4 创建固定大小的缩略图
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage) .size(200, 200) .asBufferedImage();
上面的代码在 originalImage
中获取一个图像,并使用 thumbnail
创建一个200 × 200像素的缩略图,并将结果存储在 thumbnail
中。
4.5 按给定因子对图像进行缩放
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage) .scale(0.25) .asBufferedImage();
上面的代码以 originalImage
中的图像为例,创建了原始图像的 25% 的缩略图,并使用默认的缩放技术来生成存储在 thumbnail
中的缩略图。
4.6 在创建缩略图时旋转图像
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage thumbnail = Thumbnails.of(originalImage) .size(200, 200) .rotate(90) .asBufferedImage();
上面的代码以原始图像为基础,创建一个顺时针旋转90度的缩略图。
4.7 创建带有水印的缩略图
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage) .size(200, 200) .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f) .asBufferedImage();
如图所示,可以通过调用水印方法将水印添加到缩略图中。
定位可以从“位置”枚举中选择。
缩略图的不透明度(或相反,透明度)可以通过更改最后一个参数来调整,其中0.0f是缩略图完全透明,1.0f是水印完全不透明。
4.8 向特定目录写入缩略图
File destinationDir = new File("path/to/output");
Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg") .size(200, 200) .toFiles(destinationDir, Rename.PREFIX_DOT_THUMBNAIL);
这个示例将获取源图像,并将它们的缩略图作为文件写入destinationDir(路径/到/输出目录),同时使用thumbnail 命名它们。附加在文件名后面的。
因此,缩略图将被写为文件在:
path/to/output/thumbnail.apple.jpg
path/to/output/thumbnail.banana.jpg
path/to/output/thumbnail.cherry.jpg
也可以在写入指定目录时保留原始文件名:
File destinationDir = new File("path/to/output");
Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg") .size(200, 200) .toFiles(destinationDir, Rename.NO_CHANGE);
在上述代码中,缩略图将被写为:
path/to/output/apple.jpg
path/to/output/banana.jpg
path/to/output/cherry.jpg
Since: Thumbnailator 0.4.7
文章来源: blog.csdn.net,作者:carl-zhao,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/u012410733/article/details/116038816