Thumbnailator 是 Google 开源的图片处理库,支持:图片缩放,区域裁剪,水印,旋转,保持比例。详细介绍可以百度或官网,话不多说,直接上代码,具体要结合自己的业务需要进行使用(有些复杂场景比如 旋转+缩放+裁剪+水印 难吗?)。
1 代码示例
1.1 新建一个 springboot 项目
1.2 引入依赖 thumbnailator
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
1.3 controller
@RestController
public class ThumbnailsController {
@Resource
private IThumbnailsService thumbnailsService;
/**
* 指定大小缩放
*/
@GetMapping("/changeSize")
public String changeSize(MultipartFile resource, int width, int height) {
String toFile = "C:\\Users\\Administrator\\Desktop\\thumbnailator\\changeSize";
return thumbnailsService.changeSize(resource, width, height, toFile);
}
/**
* 指定比例缩放
*/
@GetMapping("/changeScale")
public String changeScale(MultipartFile resource, double scale) {
String toFile = "C:\\Users\\Administrator\\Desktop\\thumbnailator\\changeScale";
return thumbnailsService.changeScale(resource, scale, toFile);
}
/**
* 添加水印 watermark(位置,水印,透明度)
*/
@GetMapping("/watermark")
public String watermark(MultipartFile resource, Positions center, MultipartFile watermark, float opacity) {
String toFile = "C:\\Users\\Administrator\\Desktop\\thumbnailator\\watermark";
return thumbnailsService.watermark(resource, Positions.CENTER, watermark, opacity, toFile);
}
/**
* 图片旋转 rotate(度数),顺时针旋转
*/
@GetMapping("/rotate")
public String rotate(MultipartFile resource, double rotate) {
String toFile = "C:\\Users\\Administrator\\Desktop\\thumbnailator\\rotate";
return thumbnailsService.rotate(resource, rotate, toFile);
}
/**
* 图片裁剪
*/
@GetMapping("/region")
public String region(MultipartFile resource, Positions center, int width, int height) {
String toFile = "C:\\Users\\Administrator\\Desktop\\thumbnailator\\region";
return thumbnailsService.region(resource, Positions.CENTER, width, height, toFile);
}
}
2 功能实现
这是实现类里每个方法的代码+postman测试(测试结果不再贴出来了,大家可以自行测试)。
2.1 指定大小缩放
/**
* 指定大小缩放 若图片横比width小,高比height小,放大
* 若图片横比width小,高比height大,高缩小到height,图片比例不变
* 若图片横比width大,高比height小,横缩小到width,图片比例不变
* 若图片横比width大,高比height大,图片按比例缩小,横为width或高为height
*
* @param resource 源文件路径
* @param width 宽
* @param height 高
* @param tofile 生成文件路径
*/
@Override
public String changeSize(MultipartFile resource, int width, int height, String toFile) {
try {
Thumbnails.of(resource.getInputStream()).size(width, height).outputFormat("jpg").toFile(toFile);
} catch (IOException e) {
e.printStackTrace();
}
return "changeSize";
}
2.2 指定比例缩放
/**
* 指定比例缩放 scale(),参数小于1,缩小;大于1,放大
*
* @param resource 源文件路径
* @param scale 指定比例
* @param tofile 生成文件路径
*/
@Override
public String changeScale(MultipartFile resource, double scale, String toFile) {
try {
Thumbnails.of(resource.getInputStream()).scale(scale).toFile(toFile);
} catch (IOException e) {
e.printStackTrace();
}
return "changeScale";
}
2.3 添加水印
/**
* 添加水印 watermark(位置,水印,透明度)
*
* @param resource 源文件路径
* @param center 水印位置
* @param shuiyin 水印文件路径
* @param opacity 水印透明度
* @param tofile 生成文件路径
*/
@Override
public String watermark(MultipartFile resource, Positions center, MultipartFile watermark, float opacity, String toFile) {
try {
Thumbnails.of(resource.getInputStream()).scale(1).watermark(center, ImageIO.read(watermark.getInputStream()), opacity).toFile(toFile);
} catch (IOException e) {
e.printStackTrace();
}
return "watermark";
}
2.4 图片旋转
/**
* 图片旋转 rotate(度数),顺时针旋转
*
* @param resource 源文件路径
* @param rotate 旋转度数
* @param tofile 生成文件路径
*/
@Override
public String rotate(MultipartFile resource, double rotate, String toFile) {
try {
Thumbnails.of(resource.getInputStream()).scale(1).rotate(rotate).toFile(toFile);
} catch (IOException e) {
e.printStackTrace();
}
return "rotate";
}
2.5 图片裁剪
/**
* 图片裁剪 sourceRegion()有多种构造方法,示例使用的是sourceRegion(裁剪位置,宽,高)
*
* @param resource 源文件路径
* @param center 裁剪位置
* @param width 裁剪区域宽
* @param height 裁剪区域高
* @param tofile 生成文件路径
*/
@Override
public String region(MultipartFile resource, Positions center, int width, int height, String toFile) {
try {
Thumbnails.of(resource.getInputStream()).scale(1).sourceRegion(center, width, height).toFile(toFile);
} catch (IOException e) {
e.printStackTrace();
}
return "region";
}
说明:
1.keepAspectRatio(boolean arg0) 图片是否按比例缩放(宽高比保持不变)默认 true
2.outputQuality(float arg0) 图片质量
3.outputFormat(String arg0) 格式转换
小结
需要注意的是,若 png、gif 格式图片中含有透明背景,使用该工具压缩处理后背景会变成黑色。
————————————————
版权声明:本文为CSDN博主「シ風箏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39168541/article/details/117436651