图片的处理库Thumbnailator

文章讲述了如何在Java中使用Thumbnailator库进行图片处理,包括缩略图生成、水印添加、旋转、裁剪以及批量处理等功能,提供代码示例以展示其在项目中的应用。
摘要由CSDN通过智能技术生成

摘要:最近遇到图片处理的问题,借助了Thumbnailator库,记录下使用步骤如下……

         图片处理,JDK中也提供了对应的工具类,不过处理较麻烦,Thumbnailator 是Google一个 开源Java 图像处理库,用于简化 Java 中对图像进行缩放、裁剪和添加水印等操作。GitHub - coobird/thumbnailator: Thumbnailator - a thumbnail generation library for JavaThumbnailator - a thumbnail generation library for Java - coobird/thumbnailatoricon-default.png?t=N7T8https://github.com/coobird/thumbnailator        通过 Thumbnailator开发人员可以轻松地对图像进行各种处理,而不必关心复杂的细节,参考Thumbnailator给出的Examples很详细的介绍了其多个使用功能。

1. Thumbnailator介绍

        Thumbnails.of() 方法就是 Thumbnailator 提供的一个入口方法,用于创建一个图像处理对象,其对图片的处理支持链式操作,使用Thumbnailator大致可完成如下操作:

  • 生成缩略图: 通过指定目标尺寸,可以轻松地生成原始图像的缩略图;
  • 添加水印: 可以在图像上方便地添加文本或其他图像作为水印;
  • 旋转和翻转: 支持对图像进行旋转和翻转操作;
  • 批量处理: 能够方便地对多个图像进行批量处理,生成一组缩略图;
  • 格式转换: 可以将图像转换为不同的格式,如 JPEG、PNG 等;
  • 链式调用: 支持链式调用,可以在一行代码中实现多个操作,使代码更加简洁和易读。
// 切割
Thumbnails.of(path + "caomei.jpg").sourceRegion(Positions.BOTTOM_RIGHT, 200,200).size(200,200).toFile(path+"crop.jpg");
// 缩放: 分为按比例缩放scale和按长宽缩放size
Thumbnails.of(path + "caomei.jpg").scale(0.7).toFile(path+"scale1.jpg");
Thumbnails.of(path + "caomei.jpg").scale(1.5).toFile(path+"scale2.jpg");
Thumbnails.of(path + "caomei.jpg").size(500, 500).keepAspectRatio(false).toFile(path+"size1.jpg");
// keepAspectRatio(true)等比缩放
Thumbnails.of(path + "caomei.jpg").size(500,500).keepAspectRatio(true).toFile(path+"size2.jpg");
// 旋转
Thumbnails.of(path + "caomei.jpg").size(500,500).keepAspectRatio(true).rotate(90).toFile(path+"size2.jpg");

2. 项目中使用Thumbnailator

        项目中使用Thumbnailator步骤也很简单,下面实现上传图片接口,将缩放图片,并返回图片链接。

        首先,依旧是pom.xml中配置,并使用Maven引入依赖

<!-- 图片处理依赖 -->
<dependency>
  <groupId>net.coobird</groupId>
  <artifactId>thumbnailator</artifactId>
  <version>0.4.14</version>
</dependency>

        然后,就可以在具体方法中使用Thumbnailator。例如,在上传图片时,设置图片尺寸,添加水印并使用新名称保存,实现如下:

// 为了在图片地址中保存URL,传入HttpServletRequest
@PostMapping("admin/upload/image")
public ApiRestResponse uploadImage(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) throws IOException {
    // 获取上传文件原始名称
    String fileName = file.getOriginalFilename(); //fileName: logo.png
    // 获取图片文件格式,后缀
    String suffixName = fileName.substring(fileName.lastIndexOf(".")); // suffixName: .png
    // 生成文件名称UUID
    UUID uuid = UUID.randomUUID();
    String newFileName = uuid.toString() + suffixName; // newfileName: b93fee5a-271c-4922-b57e-99b5c3413d82.png
    // 创建文件夹
    File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);
    File destFile = new File(Constant.FILE_UPLOAD_DIR + newFileName);
    if (!fileDirectory.exists()) { //文件夹不存在,则创建fileDirectory.mkdir()
        if (!fileDirectory.mkdir()) {
            throw new ImoocMallException(ImoocMallExceptionEnum.MKDIR_FAILED);
        }
    }
    try {
        file.transferTo(destFile);
    } catch (IOException e) {
        e.printStackTrace();
    }
    // 对目标文件进行缩略图处理,并添加水印
    Thumbnails.of(destFile) // 选择目标文件
            .size(Constant.IMAGE_SIZE, Constant.IMAGE_SIZE) // 设置缩略图大小
            .watermark(
                    Positions.BOTTOM_RIGHT, // 设置水印位置为右下角
                    ImageIO.read(new File(Constant.FILE_UPLOAD_DIR + Constant.WATER_MARK_JPG)), // 读取水印图片
                    Constant.IMAGE_OPACITY // 设置水印透明度
            )
            .toFile(new File(Constant.FILE_UPLOAD_DIR + newFileName)); // 输出处理后的文件到指定路径
    try {
        return ApiRestResponse.success(getHost(new URI(httpServletRequest.getRequestURL()+""))+"/images/"+newFileName);
    } catch (URISyntaxException e) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.UPLOAD_FAILED);
    }
}

        通过上述方法可以缩放并添加CSDN作为水印的图片如下:

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值