小工具知识网

当前位置: 首页 > 行业知识 > 图片的处理库Thumbnailator

行业知识

图片的处理库Thumbnailator

2026-10-29 16:32:43 来源:互联网转载

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

         图片处理,JDK中也提供了对应的工具类,不过处理较麻烦,Thumbnailator 是Google一个 开源Java 图像处理库,用于简化 Java 中对图像进行缩放、裁剪和添加水印等操作。GitHub - coobird/thumbnailator: Thumbnailator - a thumbnail generation library for JavaThumbnailator - a thumbnail generation library for Java - coobird/thumbnailatorhttps://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和按长宽缩放sizeThumbnails.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引入依赖

      net.coobird  thumbnailator  0.4.14

            然后,就可以在具体方法中使用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作为水印的图片如下:

上一篇:怎么设置服务器双线的?

下一篇:原神pc怎么选择服务器?