Java使用thumbnailator进行图片压缩缩放裁剪水印旋转处理
一、thumbnailator介绍
纯Java开源类库Thumbnailator,由Google提供。支持的操作有:图片压缩、图片缩放,图片裁剪,水印,旋转等
二、使用步骤
1.maven的pom.xml引入如下
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
2.测试代码
//进行图片压缩,图片尺寸不变,压缩图片文件大小outputQuality实现,参数1为最高质量
//scale 图片的压缩比例 值在0-1之间,1f就是原图,0.5就是原图的一半大小
//outputQuality 图片压缩的质量 值在0-1 之间,越接近1质量越好,越接近0质量越差
Thumbnails.of("d:/temp/source.jpg").scale(1f).outputQuality(0.25f).outputFormat("jpg").toFile("d:/temp/target.jpg");
图片尺寸按比例放大或缩小,图片不压缩,scale(0.5f)表示缩小到一半
Thumbnails.of("d:/temp/source.jpg").scale(0.1f).outputQuality(1.0f).outputFormat("jpg").toFile("d:/temp/target.jpg");
//指定大小进行缩放
/*
* size(width,height) 若图片横比200小,高比300小,不变
* 若图片横比200小,高比300大,高缩小到300,图片比例不变 若图片横比200大,高比300小,横缩小到200,图片比例不变
* 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300
*/
Thumbnails.of("d:/temp/source.jpg").size(200, 300).outputQuality(1.0f).outputFormat("jpg").toFile("d:/temp/target.jpg");
不按照比例,指定大小进行缩放,keepAspectRatio(false) 默认是按照比例缩放的
Thumbnails.of("d:/temp/source.jpg").size(200, 300).keepAspectRatio(false).toFile("d:/temp/target.jpg");
旋转,rotate(角度),正数:顺时针 负数:逆时针
Thumbnails.of("d:/temp/source.jpg").size(200, 300).rotate(90).toFile("d:/temp/target.jpg");
水印.watermark(位置,水印图,透明度)
Thumbnails.of("d:/temp/source.jpg").size(300, 200).watermark(Positions.CENTER, ImageIO.read(new File("D:/temp/watermark.png")), 0.5f).toFile("d:/temp/target.jpg");
裁剪
Thumbnails.of("d:/temp/source.jpg").sourceRegion(Positions.TOP_LEFT, 500, 500).size(400, 400).toFile("d:/temp/target.jpg");
转换图片格式
Thumbnails.of("d:/temp/source.jpg").scale(1f).outputFormat("png").toFile("d:/temp/target.png");
输出成文件流OutputStream
//这里的OutputStream可以换成springboot的response的输出流,这样就可以直接输出到浏览器了
OutputStream os = new FileOutputStream("d:/temp/target.jpg");
//同样of方法后面可以接Inputstream输入流,不一定需要文件
Thumbnails.of("d:/temp/source.jpg").scale(1f).outputFormat("jpg").toOutputStream(os);