欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

SpringBoot 集成 thumbnailator (图片缩放,区域裁剪,水印,旋转,保持比例)保姆级教程(含代码)

发布时间:2024/10/6 javascript 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 SpringBoot 集成 thumbnailator (图片缩放,区域裁剪,水印,旋转,保持比例)保姆级教程(含代码) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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 {@Resourceprivate 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 生成文件路径*/@Overridepublic 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 生成文件路径*/@Overridepublic 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 生成文件路径*/@Overridepublic 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 生成文件路径*/@Overridepublic 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 生成文件路径*/@Overridepublic 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 格式图片中含有透明背景,使用该工具压缩处理后背景会变成黑色。

总结

以上是生活随笔为你收集整理的SpringBoot 集成 thumbnailator (图片缩放,区域裁剪,水印,旋转,保持比例)保姆级教程(含代码)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。