什么是Thumbnailator?
Thumbnailator是Java的缩略图生成库。
为什么使用Thumbnailator?
用Java制作高质量的缩略图可能是一项相当困难的任务。
学习如何使用图像I / O API,Java 2D API,图像处理,图像缩放技术,但不要担心!Thumbnailator将为您处理所有这些事情!
Thumbnailator是单个JAR文件,不依赖于外部库,从而使开发和部署变得简单而容易。它也可以在Maven中央存储库中找到,以便轻松包含在Maven项目中。
使用示例:
首先maven引入jar文件
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
示例1:
在目录中创建图像文件的JPEG缩略图,将它们全部调整为最大尺寸为640像素乘480像素,同时保留原始图像的长宽比。
public static void main(String[] args) throws IOException {
String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator";
Thumbnails.of(new File(filePath).listFiles())
.size(640, 480)
.outputFormat("jpg")
.toFiles(Rename.PREFIX_DOT_THUMBNAIL);
}
效果
Thumbnailator提供的流畅接口简化了将缩略图制作为单个方法调用的任务!
无需访问Image I / O API并BufferedImage通过Graphics2D对象手动操作。Thumbnailator为您完成所有这些工作。
示例二:
从图像文件创建缩略图:将Img1.jpg调整图片的大小,然后保存到Img1_thumbnail.jpg。
public static void main(String[] args) throws IOException {
String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
Thumbnails.of(new File(filePath))
.size(640, 480)
.toFile(new File(newFilePath));
}
或者,Img1_thumbnail将接受文件名作为String。File不需要使用对象来指定图像文件:
public static void main(String[] args) throws IOException {
String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
Thumbnails.of(filePath)
.size(640, 480)
.toFile(newFilePath);
在编写快速的原型代码时,或者在脚本语言中使用Thumbnailator时,此格式很有用。
示例三:
创建带有旋转和水印的缩略图
String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
String watermark = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img2.jpg";
Thumbnails.of(new File(filePath))
.size(640, 480)
.rotate(90)//顺时针旋转90度
.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(watermark)), 0.7f)//水印
.outputQuality(0.8)
.toFile(new File(newFilePath));
}
在此示例中,将Img1.jpg调整图片的大小,然后将其顺时针旋转90度,然后在右下角放置半透明(0.7f)的水印,然后将其保存为Img1_thumbnail.jpg 80%的压缩质量设置。
示例四:
创建缩略图并写入 OutputStream
OutputStream os = ...;
Thumbnails.of("large-picture.jpg")
.size(200, 200)
.outputFormat("png")
.toOutputStream(os);
在此示例中,文件中的图像large-picture.jpg被调整为最大尺寸为200 x 200(保持原始图像的纵横比),并将该图像写入指定OutputStream的PNG图像中。
示例五
创建固定大小的缩略图
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.size(200, 200)
.asBufferedImage();
上面的代码使用拍摄图像,originalImage并使用创建一个200像素乘200像素的缩略图,并将结果存储在中thumbnail。
示例六:
按给定因子缩放图像
BufferedImage originalImage = ImageIO.read(new File("original.png"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.scale(0.25)
.asBufferedImage();
上面的代码将图像originalImage导入,并创建一个占原始图像25%的缩略图,并使用默认的缩放技术以制作存储在中的缩略图thumbnail。
示例七:
创建缩略图时旋转图像
BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage thumbnail = Thumbnails.of(originalImage)
.size(200, 200)
.rotate(90)
.asBufferedImage();
上面的代码获取原始图像并创建一个缩略图,该缩略图将顺时针旋转90度。
示例八:
创建带有水印的缩略图
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();
如图所示,可以通过调用该watermark方法将水印添加到缩略图。
可以从Positions枚举中选择位置。
可以通过更改最后一个参数来调整缩略图的不透明度(或相反,透明度),最后一个参数0.0f是缩略图完全透明,而1.0f水印则完全不透明。
示例九:
将缩略图写入特定目录
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(path/to/output目录),同时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