JavaWeb-Springboot图片裁剪

简介: Springboot下,通过HTTP方式对图片进行裁剪

1. 背景

CJ

这几天碰巧手头上事情不是很多,开始整理宝宝们的图片,由于平常比较勤快,所以宝宝的图片太多,遇到好些重复的图片处理,具体实现可以查看

[[Java多线程-手把手Java多线程实战]],现在遇到另一个问题,就是在上传空间的过程中我想裁剪以及添加水印,有点犯难,那么多图片,挨个弄的话,这是要崩溃的节奏。

网上找了一圈,我看到一个开源插件 thumbnailator 比较符合我当前的需求,关于thumbnailator大家可以看下 thumbnailator官网  ,先了解它的基本特点,准备开始撸。

2. 基本使用

thumbnailator 使用非常简单,它核心方法都在它的 Builder 中。我们重点从它构造方法和 Builder 中一窥究竟。

2.1. 构造方法

构造方法

2.2. 方法列表

常用的有基本方法,详细见以下列表:

方法名 | 用途 |

size(int width, int height) | 按照高 宽裁剪图片 |

width(int width) | 按照 宽裁剪图片 |

height(int height) | 按照 高裁剪图片 |

rotate(double angle) | 设置应用于缩略图的旋转量 |

scale(double scale) | 按照 比例 缩放 图片 |

scale(double scaleWidth, double scaleHeight) | 按照 高度 宽度 比例 缩放 图片 |

sourceRegion(Region sourceRegion) | 从指定的源区域 创建缩略图 |

sourceRegion(Position position, Size size) | 从指定的源区域 创建缩略图 |

sourceRegion(int x, int y, int width, int height) | 从指定的源区域 创建缩略图 |

watermark(BufferedImage image) | 设置水印的图像以应用于缩略图 |

watermark(BufferedImage image, float opacity) | 设置水印的图像和不透明度以应用于缩略图 |

watermark(Position position, BufferedImage image, float opacity) | 设置图像水印的不透明度和位置以应用于缩略图 |

watermark(Watermark w)| 设置水印以应用于缩略图 |

2.3. IDEA集成

我演示用的是利用 SpringBoot 集成的 Web,模块构建我选用的是 gradle 大家根据自己选择适用。

下来添加基本依赖即可。


archivesBaseName = 'dior-thumbnailator'

dependencies {

 compile('org.springframework.boot:spring-boot-starter-web:2.3.4.RELEASE')

 compile group: 'net.coobird', name: 'thumbnailator', version: '0.4.13'

}

  

3. 案例

这一章节主要利用一些例子来展示在项目中如何使用,主要有缩放、添加水印、旋转、裁剪。

  • 简单包装了下,对外开放能力,所以写一个接口。

public interface IThumbnailsService {

  

 void changeSize(File resource, int width, int height, String tofile);

  

 void changeScale(File resource, double scale, String tofile);

  

 void watermark(File resource, Positions p, File shuiyin, float opacity, String tofile);

  

 void rotate(File resource, double rotate, String tofile);

 void region(File resource, Positions p, int width, int height, String tofile);

}
  • 实现类

@Component("")

public class ThumbnailsService implements IThumbnailsService {

  

 /**

 *  指定大小缩放 若图片横比width小,高比height小,放大

 *  若图片横比width小,高比height大,高缩小到height,图片比例不变

 *  若图片横比width大,高比height小,横缩小到width,图片比例不变

 *  若图片横比width大,高比height大,图片按比例缩小,横为width或高为height

 * @Description

 * @param resource 源文件路径

 * @param width 宽

 * @param height 高

 * @param tofile 生成文件路径

 * @return void

 * @throws

 * @date 21/1/6 16:29

 */

 @Override

 public void changeSize(File resource, int width, int height, String tofile) {

 try {

 Thumbnails.of(resource)

 .size(width, height)

 .toFile(new File(tofile+resource.getName()));

 } catch (IOException e) {

 e.printStackTrace();

 }

 }

  

 /** 指定比例缩放 scale(),参数小于1,缩小;大于1,放大

 * @Description

 * @param resource 源文件路径

 * @param scale 指定比例

 * @param tofile 生成文件路径

 * @return void

 * @throws

 * @date 21/1/6 17:00

 */

 @Override

 public void changeScale(File resource, double scale, String tofile) {

 try {

 Thumbnails.of(resource).scale(scale).toFile(tofile+resource.getName());

 } catch (IOException e) {

 e.printStackTrace();

 }

 }

  

 /** 添加水印 watermark(位置,水印,透明度)

 * @Description

 * @param resource 源文件路径

 * @param p 水印位置

 * @param shuiyin 水印文件路径

 * @param opacity 水印透明度

 * @param tofile 生成文件路径

 * @return void

 * @throws

 * @date 21/1/6 17:08

 */

 @Override

 public void watermark(File resource, Positions p, File shuiyin, float opacity, String tofile) {

  

 try {

 Thumbnails.of(resource).scale(1).watermark(p, ImageIO.read(shuiyin), opacity).toFile(tofile+resource.getName());

 } catch (IOException e) {

 e.printStackTrace();

 }

 }

  

 /** 图片旋转 rotate(度数),顺时针旋转

 * @Description

 * @param resource 源文件路径

 * @param rotate 旋转度数

 * @param tofile 生成文件路径

 * @return void

 * @throws

 * @date 21/1/6 17:08

 */

 @Override

 public void rotate(File resource, double rotate, String tofile) {

  

 try {

 Thumbnails.of(resource).scale(1).rotate(rotate).toFile(tofile+resource.getName());

 } catch (IOException e) {

 e.printStackTrace();

 }

 }

  

 /** 图片裁剪 sourceRegion()有多种构造方法,示例使用的是sourceRegion(裁剪位置,宽,高)

 * @Description

 * @param resource 源文件路径

 * @param p 水印位置

 * @param width 宽

 * @param height 高

 * @param tofile 生成文件路径

 * @return void

 * @throws

 * @date 21/1/6 17:08

 */

 @Override

 public void region(File resource, Positions p, int width, int height, String tofile) {

 try {

 Thumbnails.of(resource).scale(1).sourceRegion(p, width, height).toFile(tofile+resource.getName());

 } catch (IOException e) {

 e.printStackTrace();

 }

 }

}

  

4. 源码地址,如果觉得对你有帮助,请Star

Github源码地址

目录
相关文章
|
9月前
|
Java 数据安全/隐私保护
SpringBoot【集成Thumbnailator】Google开源图片工具缩放+区域裁剪+水印+旋转+保持比例等(保姆级教程含源代码)
SpringBoot【集成Thumbnailator】Google开源图片工具缩放+区域裁剪+水印+旋转+保持比例等(保姆级教程含源代码)
382 0
|
存储 数据采集 安全
各种系统架构图与详细说明
原文:各种系统架构图与详细说明 共享平台逻辑架构设计 如上图所示为本次共享资源平台逻辑架构图,上图整体展现说明包括以下几个方面: 1 应用系统建设 本次项目的一项重点就是实现原有应用系统的全面升级以及新的应用系统的开发,从而建立行业的全面的应用系统架构群。
24831 1
|
Java Maven C语言
Java 实现图片裁剪(附代码) | Java工具类
Java 实现图片裁剪(附代码) | Java工具类
Java 实现图片裁剪(附代码) | Java工具类
|
消息中间件 存储 JSON
RabbitMQ之幂等性问题处理
RabbitMQ之幂等性问题处理
|
8月前
|
NoSQL API Redis
使用Redis Lua脚本实现高级限流策略
使用Redis Lua脚本实现高级限流策略
241 0
|
9月前
|
Java 计算机视觉
Java代码实现图片大小修改
Java代码实现图片大小修改
207 0
|
6月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
586 0
|
9月前
|
数据安全/隐私保护
vue-img-cutter 图片裁剪详解
vue-img-cutter 图片裁剪详解
218 1
|
9月前
|
计算机视觉 Python Windows
OpenCV自动裁剪图片
OpenCV自动裁剪图片
81 1
|
JSON Android开发 数据格式
Flutter从0到1实现高性能、多功能的富文本编辑器(模块分析篇)
经过前面两篇文章的基础知识铺垫,我们终于要进入到专栏的核心内容 — 富文本。富文本编辑器可以说是APP中最复杂,但使用场景又极广的组件之一。例如各大笔记APP的核心功能、闲鱼的商品发布功能、还
Flutter从0到1实现高性能、多功能的富文本编辑器(模块分析篇)

热门文章

最新文章