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

觉得对你有帮助,请Star

Github源码地址

Gitee源码地址

目录
相关文章
|
存储 前端开发 JavaScript
SpringBoot2.x系列教程10--SpringBoot中对静态资源文件的配置处理
前言 在前面的章节中,壹哥 跟大家说过,现在Java中的项目,有的是前后端分离的,页面和静态资源都是分离出去的,与后端的Java代码都不在一起。当然也有一些前后端不分离的项目,页面和静态资源是与Java代码存放在一个jar或war包中的,那如果是SpringBoot开发的前后端不分离项目,对这些静态资源该如何处理呢? 啥?你别告诉我,你连静态资源是什么都不知道哦! 如果你对静态资源没有清晰的认识,那我就说一下吧。一般我们说的静态资源,指的是项目中用到的图片、js、css、纯html等资源。其实在SpringBoot中,对静态资源的访问有着比较好的支持,基本使用默认配置就能满足我们的开发需求
501 0
|
6天前
|
前端开发 Java 数据库
springboot上传图片到本地
springboot上传图片到本地
55 0
|
7月前
|
Java
springboot生成二维码的正确姿势-附视频附源码
springboot生成二维码的正确姿势-附视频附源码
70 1
springboot生成二维码的正确姿势-附视频附源码
|
10月前
|
Java
springboot添加图片后访问404
今天springboot项目随意添加一张图片(只发现添加图片时访问不了,创建新的html也能马上访问,就是图片有毒!!!),
105 0
|
11月前
|
Java
学习Springboot框架一 之最简单的Springboot项目
学习Springboot框架一 之最简单的Springboot项目
53 0
SpringBoot---SpringBoot整合七牛云上传图片
SpringBoot---SpringBoot整合七牛云上传图片
SpringBoot---SpringBoot整合七牛云上传图片
|
Web App开发 JavaScript Java
撸完这个springboot项目,我对boot轻车熟路!
上次给大家分享了一个springboot+vue的校园招聘系统,视频教程加项目源码,都是开源的,应该说很香了,今天再给大家分享一个不错的springboot的项目。
159 0
撸完这个springboot项目,我对boot轻车熟路!
|
监控 IDE Java
SpringBoot实现热部署笔记
SpringBoot实现热部署笔记
SpringBoot实现热部署笔记
|
Java Spring
SpringBoot2.x系列教程03--SpringBoot花样配置之自定义Banner
前言 在前面的几个章节中,壹哥 带大家认识了SpringBoot的由来、优缺点,以及在SpringBoot中创建Web项目的3种方式。 既然我们现在已经把SpringBoot项目创建出来了,那么SpringBoot中都隐藏着哪些宝藏呢?接下来 壹哥 会带你一点点揭开她的神秘面纱,让你一点点看清SpringBoot的美!今天我们先来学习SpringBoot中的一个小花样--配置一个自定义的Banner图,咱们的学习也可以很有趣哦。 一. Spring Boot 常用配置 本章节主要给大家介绍 Spring Boot 中的一些常用配置,比如 自定义 Banner、配置日志、关闭特定的自动配置等。
234 0
|
存储 开发框架 Java
SpringBoot2.x系列教程23--SpringBoot中实现文件上传
前言 文件上传是开发时比较常见的功能之一,但是SpringBoot并没有提供额外的文件上传技术,还是依赖于SpringMVC的文件上传技术。因为在SpringBoot中集成了SpringMVC的很多常用功能,所以SpringBoot的Web模块中也包含了文件上传部分,其实实现起来没有太多的难度。 本章节 壹哥 就给大家讲一下在Spring Boot中如何实现单个文件和多个文件的上传功能。 一. 概述 1. MultipartFile简介 在SpringMVC时代,就提供了MultipartFile这个封装类,它包含了文件的二进制流和文件相关属性(文件名、大小等),而在Spring Boot中
480 0