图片处理库 Thumbnailator
常需要对图片进行处理,如 加水印,压缩,翻转 等。推荐使用一款开源的图片处理框架 Thumbnailator 。
引入依赖
1 |
<dependency> |
缩略图
单个处理
示例:生成 original.jpg 的缩略图,且保存为 thumbnail.jpg 。
1 |
Thumbnails.of(new File("original.jpg")) |
还可以直接指定
String
类型的文件名,而不需要使用
File
对象指定图片文件。如下:
1 |
Thumbnails.of("original.jpg") |
批量处理
将一个目录下的图片批量处理生成缩略图。 Rename 有两个静态变量可使用:
thumbnail.
,就不会覆盖原始的图。
例如, 1.JPG 生成缩略图后是 thumbnail.1.JPG 。
示例:生成 640 x 480 像素的 jpg 缩略图,同时保留原图的纵横比。
1 |
Thumbnails.of(new File("path/to/directory").listFiles()) |
转换格式
调用
outputFormat
方法,转入类型名实现输出缩略图的格式转换。
保持宽高比
调用
keepAspectRatio
方法,布尔参数,设置是否为缩略图保留原始图像的宽高比。
输出缩略图
1 |
OutputStream os = ...; |
在此示例中,将文件 large-picture.jpg 中的图像调整为最大尺寸 200 x 200(保持原始图像的纵横比),并将其作为PNG 图像写入指定的输出流。
固定大小
1 |
BufferedImage originalImage = ImageIO.read(new File("original.png")); |
以原始图像格式获取图像,并创建 200 × 200 的缩略图,并将结果存储在 thumbnail 中。
按比例缩放
1 |
BufferedImage originalImage = ImageIO.read(new File("original.png")); |
旋转缩略图
1 |
BufferedImage originalImage = ImageIO.read(new File("original.jpg")); |
水印缩略图
1 |
BufferedImage originalImage = ImageIO.read(new File("original.jpg")); |
旋转+水印
调用
rotate(double angle)
实现缩略图角度施转,
正数
是顺时印,
负数
是逆时针。可多次调用实现多次旋转。
示例如下:
1 |
Thumbnails.of(new File("original.jpg")) |
生成 original.jpg 的缩略图,大小为 160 x 160 ,然后将其 顺时针旋转90度 ,然后在右下角放置 半透明的水印 ,然后将其保存到 image-with-watermark.jpg 中, 80% 压缩质量设置。
加文字水印
1 |
BufferedImage originalImage = ImageIO.read(new File("original.jpg")); |
此方式看需要使用,最好是将文字转为透明背景的文字图片,再将其做为水印。(由 UI 将文字处理成图片,后端设置文字样式比较痛苦)。
裁剪缩略图
1 |
Thumbnails.of("D:\\picture\\3.jpg") |