Thumbnailator
一、简介
# Thumbnailator 是一个用java生成高质量缩略图的第三方库,可以用来
1、生成缩略图
2、添加水印
3、图片旋转
4、图片大小缩放
5、图片压缩
# Thumbnailator是单个JAR文件,不依赖于外部库,从而使开发和部署变得简单而容易。它也可以在Maven中央存储库中找到,以便轻松包含在Maven项目中。
Maven 依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.15</version>
</dependency>
二、示例
2.1 示例一
在目录中创建图像文件的JPG缩略图,将它们全部调整为最大尺寸为640像素乘480像素,同时保留原始图像的长宽比。
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.name.Rename;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
/**
* 示例一:在目录中创建图像文件的JPG缩略图,将它们全部调整为最大尺寸为640像素乘480像素,同时保留原始图像的长宽比。
*/
public class Example1 {
/**
* 。size(int width, int height) : 设置缩略图的大小。注意.size(int, int) 方法将缩略图将保留原始图像的纵横比。 如果缩略图应该被强制为指定的大小,则可以使用forceSize(int, int)方法代替此方法。
* width – 缩略图的宽度。
* height – 缩略图的高度。
* .size()与.forceSize() 不可同时存在
* .forceSize() : 表示生成的缩略图强制为指定的大小
* .outputFormat(String format) : 设置写入缩略图时使用的压缩格式。目前,压缩格式字符串是否有效取决于Java Image I/O API 是否将字符串识别为它支持输出的格式。 (可以通过调用ImageIO.getWriterFormatNames()方法获得有效的格式名称。)
* .toFiles(Rename rename): 创建缩略图并使用Rename功能将它们存储到文件中以确定文件名。
* 如果目标文件存在,并且通过使用false调用allowOverwrite(boolean)方法禁用了覆盖文件,则不会写入目标文件已经存在的缩略图。
* 要调用此方法,必须通过调用of(File...)方法从文件创建缩略图。
*
* Rename.SUFFIX_DOT_THUMBNAIL : 在文件扩展名之前将.thumbnail附加到文件名。 例如,给定picture.jpg ,结果是picture.thumbnail.jpg
* Rename.PREFIX_DOT_THUMBNAIL : 附加thumbnail. 到文件名的开头。 例如,给定picture.jpg ,结果是thumbnail.picture.jpg
* Rename.PREFIX_HYPTHEN_THUMBNAIL: 将thumbnail-附加到文件名的开头。 例如,给定picture.jpg ,结果是thumbnail-picture.jpg
* .allowOverWrite(Boolean allowOverwrite) : 指定是否覆盖已存在的文件,
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.print("有效的格式名称: ");
for (String writerFormatName : ImageIO.getWriterFormatNames()) {
System.out.print(writerFormatName + "\t");
}
String filePath = "D:\\code\\thumbnailator";
Thumbnails.of(new File(filePath).listFiles())
.size(640, 480)
.outputFormat("jpg")
.allowOverwrite(false)
.toFiles(Rename.SUFFIX_DOT_THUMBNAIL);
}
}
2.2 示例二:从图像文件创建缩略图
从图像文件创建缩略图
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import java.io.File;
import java.io.IOException;
/**
* 示例二:从图像文件创建缩略图
*/
public class Example2 {
/**
* .toFile(String outFilepath) :
* 创建缩略图并将其写入File 。
* 如果目标文件存在,并且通过使用false调用allowOverwrite(boolean)方法已禁用覆盖文件,
* 则会抛出IllegalArgumentException 。
* 要调用此方法,缩略图必须是从单一来源创建的。
* .toFile(File outFile)
* 创建缩略图并将其写入File 。
* 如果目标文件存在,并且通过使用false调用allowOverwrite(boolean)方法已禁用覆盖文件,则会抛出IllegalArgumentException 。
* 要调用此方法,缩略图必须是从单一来源创建的。
*/
public static void main(String[] args) throws IOException {
String filePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.png";
String newFilePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.thumbnail.png";
Thumbnails.of(new File(filePath))
.size(640, 480)
// .toFile(newFilePath)
.toFile(new File(newFilePath));
}
}
2.3 示例三:创建带有旋转和水印的缩略图
创建带有旋转和水印的缩略图
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
/**
* 示例三:创建带有旋转和水印的缩略图
*/
public class Example3 {
/**
* .rotate(double angle) :
* 设置要应用于缩略图的旋转量。
* 缩略图将顺时针旋转指定的角度。
* 可以多次调用此方法以应用多次旋转。
* 如果要应用多个旋转,将按照调用此方法的顺序应用旋转。
* 调用此方法设置此参数是可选的。
* .watermark(Position position, BufferedImage image, float opacity):
* position – 水印的位置。
* image – 水印的图像。
* opacity – 水印的不透明度。 该值应介于0.0f和1.0f之间,其中0.0f是完全透明的,而1.0f是完全不透明的。
* 设置要应用于缩略图的图像、不透明度和水印位置。
* 可以多次调用此方法以应用多个水印。
* 如果要应用多个水印,则将按照调用此方法的顺序应用水印。
* 调用此方法设置此参数是可选的。
* .outputQuality(double quality) :
* 设置将缩略图写入外部目标(例如文件或输出流)时用于压缩缩略图的压缩算法的输出质量。
* 该值是介于0.0d和1.0d之间的double 0.0d值,其中0.0d表示最低质量, 1.0d表示压缩编解码器应使用的最高质量设置。
*/
public static void main(String[] args) throws IOException {
String filePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.png";
String newFilePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.thumbnail.png";
String watermark = "D:\\code\\thumbnailator\\pxc.jpeg"; // 水印图片
Thumbnails.of(new File(filePath))
.size(640, 480)
.rotate(60)// 旋转60°
.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(watermark)), 0.5f) //水印位于右下角,半透明
.outputQuality(0.8)// 图片压缩到80%质量
.toFile(newFilePath);
}
}
2.4 示例四: 创建缩略图并写入 OutputStream
创建缩略图并写入 OutputStream
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* 示例四:创建缩略图并写入 OutputStream
* @author lizp
* @date 2021/12/20
*/
public class Example4 {
/**
* 创建缩略图并将其写入OutputStream 。
* 要调用此方法,缩略图必须是从单一来源创建的。
* 请注意,在将缩略图写入OutputStream完成后,将不会调用OutputStream.close()方法。
*/
public static void main(String[] args) throws IOException {
OutputStream outputStream = new FileOutputStream("");
String filePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.png";
Thumbnails.of(new File(filePath))
.size(640, 480)
.toOutputStream(outputStream);
}
}
2.5 示例五: 创建固定大小的缩略图
创建固定大小的缩略图
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
/**
* 示例五:创建固定大小的缩略图
*/
public class Example5 {
public static void main(String[] args) throws IOException {
BufferedImage read = ImageIO.read(new File("D:\\code\\thumbnailator\\微信图片_20210802134945.png"));
BufferedImage bufferedImage = Thumbnails.of(read)
.forceSize(200, 200)
.asBufferedImage();
System.out.println(bufferedImage.getHeight());
System.out.println(bufferedImage.getWidth());
}
}
2.6 示例6:按给定因子缩放图像
按给定因子缩放图像【 按比例缩放图片 】
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import java.io.IOException;
/**
* 示例六: 按比例缩放图片
*/
public class Example6 {
/**
* .scale(double scale):
* scale – 创建缩略图时使用的缩放因子。 该值必须是大于0.0的double Double.POSITIVE_INFINITY值,而不是Double.POSITIVE_INFINITY 。
* 设置缩略图的缩放比例。
* 例如,要创建原始大小 50% 的缩略图,可以使用以下代码:
* 一旦调用此方法,调用size(int, int)方法或scale(double, double)方法或keepAspectRatio(boolean)方法将导致IllegalStateException 。
* 多次调用此方法将导致IllegalStateException 。
*/
public static void main(String[] args) throws IOException {
String filePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.png";
String newFilePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.thumbnail3.png";
Thumbnails.of(filePath)
.scale(0.5)
.toFile(newFilePath);
}
}
2.7 示例7: 生成缩略图到指定的目录
生成缩略图到指定的目录
package com.lzp.summary.thumbnailator;
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.name.Rename;
import java.io.File;
import java.io.IOException;
/**
* 示例七: 生成缩略图到指定的目录
*/
public class Example7 {
public static void main(String[] args) throws IOException {
String filePath = "D:\\code\\thumbnailator\\微信图片_20210802134945.png";
Thumbnails.of(filePath)
.scale(0.5)
.toFiles(new File("D:\\code\\thumbnailator\\"), Rename.SUFFIX_DOT_THUMBNAIL);
}
}
2.8 示例8: 将指定目录下所有图片生成缩略图
在示例1中有体现