SpringBoot2.x 整合 thumbnailator 图片处理

1、序

在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的。最近,阿粉就被要求实现这个功能,原因是客户那边嫌速度过慢。借此机会,阿粉今儿就给大家介绍一些一下我做这个功能时使用的 Thumbnailator 库。

Thumbnailator 是一个优秀的图片处理的 Google 开源 Java 类库,专门用来生成图像缩略图的,通过很简单的 API 调用即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。可毫不夸张的说,它是一个处理图片十分棒的开源框架。

支持:图片缩放,区域裁剪,水印,旋转,保持比例。

Thumbnailator 官网:https://code.google.com/p/thumbnailator/

有了这玩意,就不用在费心思使用 Image I/O API,Java 2D API 等等来生成缩略图了。

废话少说,直接上代码,先来看一个最简单的例子:

2、代码示例

2.1. 新建一个springboot项目

2.2. 引入依赖 thumbnailator


 net.coobird
 thumbnailator
 0.4.8

2.3. controller

主要实现了如下几个接口作为测试:

@RestController
public class ThumbnailsController {
 @Resource
 private IThumbnailsService thumbnailsService;

 /**
  * 指定大小缩放
  * @param resource
  * @param width
  * @param height
  * @return
  */
 @GetMapping("/changeSize")
 public String changeSize(MultipartFile resource, int width, int height) {
  return thumbnailsService.changeSize(resource, width, height);
 }

 /**
  * 指定比例缩放
  * @param resource
  * @param scale
  * @return
  */
 @GetMapping("/changeScale")
 public String changeScale(MultipartFile resource, double scale) {
  return thumbnailsService.changeScale(resource, scale);
 }

 /**
  * 添加水印 watermark(位置,水印,透明度)
  * @param resource
  * @param p
  * @param shuiyin
  * @param opacity
  * @return
  */
 @GetMapping("/watermark")
 public String watermark(MultipartFile resource, Positions p, MultipartFile shuiyin, float opacity) {
  return thumbnailsService.watermark(resource, Positions.CENTER, shuiyin, opacity);
 }

 /**
  * 图片旋转 rotate(度数),顺时针旋转
  * @param resource
  * @param rotate
  * @return
  */
 @GetMapping("/rotate")
 public String rotate(MultipartFile resource, double rotate) {
  return thumbnailsService.rotate(resource, rotate);
 }

 /**
  * 图片裁剪
  * @param resource
  * @param p
  * @param width
  * @param height
  * @return
  */
 @GetMapping("/region")
 public String region(MultipartFile resource, Positions p, int width, int height) {
  return thumbnailsService.region(resource, Positions.CENTER, width, height);
 }
}

3、功能实现

其实引入了这个 Thumbnailator 类库后,代码其实很少,因为我们只需要按照规则调用其 API 来实现即可。就个人而言,挺喜欢这种 API 的方式,简洁,易懂,明了。

3.1 指定大小缩放

/**
 * 指定大小缩放 若图片横比width小,高比height小,放大 
 * 若图片横比width小,高比height大,高缩小到height,图片比例不变
 * 若图片横比width大,高比height小,横缩小到width,图片比例不变 
 * 若图片横比width大,高比height大,图片按比例缩小,横为width或高为height
 * 
 * @param resource  源文件路径
 * @param width     宽
 * @param height    高
 * @param tofile    生成文件路径
 */
public static void changeSize(String resource, int width, int height, String tofile) {
 try {
  Thumbnails.of(resource).size(width, height).toFile(tofile);
 } catch (IOException e) {
  e.printStackTrace();
 }
}

测试:

SpringBoot2.x 整合 thumbnailator 图片处理

3.2 指定比例缩放/**
* 指定比例缩放 scale(),参数小于1,缩小;大于1,放大
*
* @param resource 源文件路径
* @param scale 指定比例
* @param tofile 生成文件路径
*/
public static void changeScale(String resource, double scale, String tofile) {
try {
Thumbnails.of(resource).scale(scale).toFile(tofile);
} catch (IOException e) {
e.printStackTrace();
}
}

测试:

SpringBoot2.x 整合 thumbnailator 图片处理

3.3 添加水印

/**
 * 添加水印 watermark(位置,水印,透明度)
 * 
 * @param resource  源文件路径
 * @param p         水印位置
 * @param shuiyin   水印文件路径
 * @param opacity   水印透明度
 * @param tofile    生成文件路径
 */
public static void watermark(String resource, Positions p, String shuiyin, float opacity, String tofile) {
 try {
  Thumbnails.of(resource).scale(1).watermark(p, ImageIO.read(new File(shuiyin)), opacity).toFile(tofile);
 } catch (IOException e) {
  e.printStackTrace();
 }
}

测试:

SpringBoot2.x 整合 thumbnailator 图片处理

3.4 图片旋转/**
* 图片旋转 rotate(度数),顺时针旋转
*
* @param resource 源文件路径
* @param rotate 旋转度数
* @param tofile 生成文件路径
*/
public static void rotate(String resource, double rotate, String tofile) {
try {
Thumbnails.of(resource).scale(1).rotate(rotate).toFile(tofile);
} catch (IOException e) {
e.printStackTrace();
}
}

测试:

SpringBoot2.x 整合 thumbnailator 图片处理

3.5 图片裁剪

/**
 * 图片裁剪 sourceRegion()有多种构造方法,示例使用的是sourceRegion(裁剪位置,宽,高)
 * 
 * @param resource  源文件路径
 * @param p         裁剪位置
 * @param width     裁剪区域宽
 * @param height    裁剪区域高
 * @param tofile    生成文件路径
 */
public static void region(String resource, Positions p, int width, int height, String tofile) {
 try {
  Thumbnails.of(resource).scale(1).sourceRegion(p, width, height).toFile(tofile);
 } catch (IOException e) {
  e.printStackTrace();
 }
}

测试:

SpringBoot2.x 整合 thumbnailator 图片处理

说明:

小结

值得注意的是,若 png、gif 格式图片中含有透明背景,使用该工具压缩处理后背景会变成黑色,这是 Thumbnailator 的一个 bug,预计后期版本会解决。

代码地址 :公众号回复【源码仓库】获得

最后说两句(求关注)

最近大家应该发现微信公众号信息流改版了吧,再也不是按照时间顺序展示了。这就对阿粉这样的坚持的原创小号主,可以说非常打击,阅读量直线下降,正反馈持续减弱。

所以看完文章,哥哥姐姐们给阿粉来个在看吧,让阿粉拥有更加大的动力,写出更好的文章,拒绝白嫖,来点正反馈呗~。

如果想在第一时间收到阿粉的文章,不被公号的信息流影响,那么可以给Java极客技术设为一个星标

SpringBoot2.x 整合 thumbnailator 图片处理

最后感谢各位的阅读,才疏学浅,难免存在纰漏,如果你发现错误的地方,由于本号没有留言功能,还请你在后台留言指出,我对其加以修改。

展开阅读全文

更新时间:2024-09-04

标签:水印   源文件   缩放   路径   比例   位置   代码   文件   测试   图片

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top