SpringBoot【集成Thumbnailator】Google开源图片工具缩放+区域裁剪+水印+旋转+保持比例等(保姆级教程含源代码)

简介: SpringBoot【集成Thumbnailator】Google开源图片工具缩放+区域裁剪+水印+旋转+保持比例等(保姆级教程含源代码)

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 格式图片中含有透明背景,使用该工具压缩处理后背景会变成黑色。

目录
打赏
0
0
0
0
276
分享
相关文章
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
文章通过一个简单的SpringBoot项目,详细介绍了前后端如何实现用户登录功能,包括前端登录页面的创建、后端登录逻辑的处理、使用session验证用户身份以及获取已登录用户信息的方法。
705 2
用户登录前后端开发(一个简单完整的小项目)——SpringBoot与session验证(带前后端源码)全方位全流程超详细教程
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
文章介绍如何在Spring Boot 3中利用GraalVM将Java应用程序编译成独立的本机二进制文件,从而提高启动速度、减少内存占用,并实现不依赖JVM运行。
465 1
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
Gemini Coder:基于 Google Gemini API 的开源 Web 应用生成工具,支持实时编辑和预览
Gemini Coder 是一款基于 Google Gemini API 的 AI 应用生成工具,支持通过文本描述快速生成代码,并提供实时代码编辑和预览功能,简化开发流程。
165 38
Gemini Coder:基于 Google Gemini API 的开源 Web 应用生成工具,支持实时编辑和预览
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
114 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
4月前
|
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
214 1
SpringBoot入门(7)- 配置热部署devtools工具
淘宝图片爬虫:Scala与Curl的高效集成
淘宝图片爬虫:Scala与Curl的高效集成
|
4月前
|
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
70 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
5月前
|
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
984 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
5月前
|
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
238 2
Springboot+shiro,完整教程,带你学会shiro
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
994 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等