工具类库:用thumbnailator处理图片
2021-05-18 本文已影响0人
alex很累
简介
Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理速度快,代码简洁。
可实现的功能如下:
A.缩放(指定大小、指定比例);
B.旋转;
C.降低图片质量来压缩图片;
D.水印;
E.裁剪;
F.转换图片类型;
G.处理后输出到OutputStream、BufferedImage。
依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.13</version>
</dependency>
起步
这个类库起手就是Thumbnails.of(A)方法,这个A可以是String类型的图片路径,可以是File对象,可以是InputStream,可以是BufferedImage。
缩放
1.指定宽高缩放比例进行缩放
// scale方法设置缩放比例
// 若宽高相同比例,只需要一个参数即可
Thumbnails.of(imagepath)
.scale(0.5)
.toFile(newimageth);
// 宽高不同比例,两个参数
Thumbnails.of(imagepath)
.scale(1, 0.5)
.toFile(newimageth);
2.指定宽高的数值进行缩放
// fontSize方法指定宽、高的数值
Thumbnails.of(imagepath)
.forceSize(100, 300)
.toFile(newimageth);
// size方法和fontsize方法类似,但是size方法会保证图片的宽高比例(不会变形)
Thumbnails.of(imagepath)
.size(100, 300)
.toFile(newimageth);
// 或者可以这么写
Thumbnails.of(imagepath)
.forceSize(100, 300)
.keepAspectRatio(false) //不保持比例
.toFile(newimageth);
旋转
rotate方法,参数为旋转的角度(正数:顺时针,负数:逆时针)。
Thumbnails.of(imagepath)
.scale(1.0)
.rotate(90)
.toFile(newimageth);
压缩图片(降低图片质量)
outputQuality方法设置图片的清晰度;outputFormat可修改图片的类型。
注意:使用该方法时,图片格式必须为jpg;如果要使用其他类型的图片类型,可以tofile的时候指定文件后缀。
Thumbnails.of(imagepath)
.scale(1.0)
.outputQuality(0.25)
.outputFormat("jpg")
.toFile(newimageth);
水印
watermark方法添加水印,第一个参数为水印的位置,第二个参数为水印图片,第三个参数为水印图片的透明度。
注意:水印图片是BufferedImage类型的,如果要添加文字水印,可以自己造一个;如果对图片有什么修改,可以直接用Thumbnailator类库。
// 水印图片
BufferedImage waterMarkImage = ImageIO.read(new File(waterMarkImagePath));
// 添加水印
Thumbnails.of(imagepath)
.scale(1.0)
.watermark(Positions.BOTTOM_RIGHT, waterMarkImage, 0.5f)
.toFile(newimageth);
转换图片类型
outputFormat指定处理后的图片类型
Thumbnails.of(imagepath)
.scale(1.0)
.outputFormat(图片类型)
.toFile(newimageth);
处理后输出到OutputStream、BufferedImage
// 输出到OutputStream
OutputStream os = newFileOutputStream(newimageth);
Thumbnails.of(imagepath)
.scale(1.0)
.toOutputStream(os);
// 输出到BufferedImage
BufferedImage bufferedImage=Thumbnails.of(imagepath)
.scale(1.0)
.asBufferedImage();
裁剪图片
sourceRegion方法指定需要的图片区域:
A.方法一:第一个参数为图片中的位置,第二个、第三个参数为裁剪区域的大小;
B.方法二:以坐标的形式,选择裁剪区域。
Thumbnails.of(imagepath)
.sourceRegion(Positions.CENTER,400,400)
.size(200,200)
.toFile(newimageth);
Thumbnails.of(imagepath)
.sourceRegion(600,500,400,400)
.size(200,200)
.toFile(newimageth);