DevNotes-SpringBoot2.x整合thumbnailator图片处理-《Java笔记》

admin 2025-10-19 05:03:13 编程 来源:ZONE.CI 全球网 0 阅读模式

SpringBoot thumbnailator 图片处理

1、序

在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的。使用 Thumbnailator 库。Thumbnailator 是一个优秀的图片处理的 Google 开源 Java 类库,专门用来生成图像缩略图的,通过很简单的 API 调用即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。两三行代码就能够从现有图片生成处理后的图片,且允许微调图片的生成方式,同时保持了需要写入的最低限度的代码量。可毫不夸张的说,它是一个处理图片十分棒的开源框架。支持:图片缩放,区域裁剪,水印,旋转,保持比例。Thumbnailator 官网:https://code.google.com/p/thumbnailator/

2、代码示例

2.1. 新建一个springboot项目

2.2. 引入依赖 thumbnailator

  1. <dependency>
  2. <groupId>net.coobird</groupId>
  3. <artifactId>thumbnailator</artifactId>
  4. <version>0.4.8</version>
  5. </dependency>

2.3. controller

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

  1. @RestController
  2. public class ThumbnailsController {
  3. @Resource
  4. private IThumbnailsService thumbnailsService;
  5. /**
  6. * 指定大小缩放
  7. * @param resource
  8. * @param width
  9. * @param height
  10. * @return
  11. */
  12. @GetMapping("/changeSize")
  13. public String changeSize(MultipartFile resource, int width, int height) {
  14. return thumbnailsService.changeSize(resource, width, height);
  15. }
  16. /**
  17. * 指定比例缩放
  18. * @param resource
  19. * @param scale
  20. * @return
  21. */
  22. @GetMapping("/changeScale")
  23. public String changeScale(MultipartFile resource, double scale) {
  24. return thumbnailsService.changeScale(resource, scale);
  25. }
  26. /**
  27. * 添加水印 watermark(位置,水印,透明度)
  28. * @param resource
  29. * @param p
  30. * @param shuiyin
  31. * @param opacity
  32. * @return
  33. */
  34. @GetMapping("/watermark")
  35. public String watermark(MultipartFile resource, Positions p, MultipartFile shuiyin, float opacity) {
  36. return thumbnailsService.watermark(resource, Positions.CENTER, shuiyin, opacity);
  37. }
  38. /**
  39. * 图片旋转 rotate(度数),顺时针旋转
  40. * @param resource
  41. * @param rotate
  42. * @return
  43. */
  44. @GetMapping("/rotate")
  45. public String rotate(MultipartFile resource, double rotate) {
  46. return thumbnailsService.rotate(resource, rotate);
  47. }
  48. /**
  49. * 图片裁剪
  50. * @param resource
  51. * @param p
  52. * @param width
  53. * @param height
  54. * @return
  55. */
  56. @GetMapping("/region")
  57. public String region(MultipartFile resource, Positions p, int width, int height) {
  58. return thumbnailsService.region(resource, Positions.CENTER, width, height);
  59. }
  60. }

3、功能实现

其实引入了这个 Thumbnailator 类库后,代码其实很少,只需要按照规则调用其 API 来实现即可。

3.1 指定大小缩放

  1. /**
  2. * 指定大小缩放 若图片横比width小,高比height小,放大
  3. * 若图片横比width小,高比height大,高缩小到height,图片比例不变
  4. * 若图片横比width大,高比height小,横缩小到width,图片比例不变
  5. * 若图片横比width大,高比height大,图片按比例缩小,横为width或高为height
  6. *
  7. * @param resource 源文件路径
  8. * @param width 宽
  9. * @param height 高
  10. * @param tofile 生成文件路径
  11. */
  12. public static void changeSize(String resource, int width, int height, String tofile) {
  13. try {
  14. Thumbnails.of(resource).size(width, height).toFile(tofile);
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }

3.2 指定比例缩放

  1. /**
  2. * 指定比例缩放 scale(),参数小于1,缩小;大于1,放大
  3. *
  4. * @param resource 源文件路径
  5. * @param scale 指定比例
  6. * @param tofile 生成文件路径
  7. */
  8. public static void changeScale(String resource, double scale, String tofile) {
  9. try {
  10. Thumbnails.of(resource).scale(scale).toFile(tofile);
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }

3.3 添加水印

  1. /**
  2. * 添加水印 watermark(位置,水印,透明度)
  3. *
  4. * @param resource 源文件路径
  5. * @param p 水印位置
  6. * @param shuiyin 水印文件路径
  7. * @param opacity 水印透明度
  8. * @param tofile 生成文件路径
  9. */
  10. public static void watermark(String resource, Positions p, String shuiyin, float opacity, String tofile) {
  11. try {
  12. Thumbnails.of(resource).scale(1).watermark(p, ImageIO.read(new File(shuiyin)), opacity).toFile(tofile);
  13. } catch (IOException e) {
  14. e.printStackTrace();
  15. }
  16. }

3.4 图片旋转

  1. /**
  2. * 图片旋转 rotate(度数),顺时针旋转
  3. *
  4. * @param resource 源文件路径
  5. * @param rotate 旋转度数
  6. * @param tofile 生成文件路径
  7. */
  8. public static void rotate(String resource, double rotate, String tofile) {
  9. try {
  10. Thumbnails.of(resource).scale(1).rotate(rotate).toFile(tofile);
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }

3.5 图片裁剪

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

说明:

  • 1.keepAspectRatio(boolean arg0) 图片是否按比例缩放(宽高比保持不变)默认 true
  • 2.outputQuality(float arg0) 图片质量
  • 3.outputFormat(String arg0) 格式转换

    注意

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

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  12