JAVA:利用 Thumbnailator 处理图片的技术指南

createh52个月前 (02-01)技术教程15

1、简述

Thumbnailator 是一个优秀的 Java 图片处理库,专门设计用于简化图片缩放和生成缩略图的操作。通过简单的 API 和高效的实现,开发者可以轻松完成图片的常见处理任务。

代码样例:https://gitee.com/lhdxhl/springboot-example.git



2、 Thumbnailator 的特点

简单易用:只需几行代码即可生成缩略图。

高性能:优化的图片处理算法,处理速度快。

支持多种图片格式:包括 JPEG、PNG、GIF 等。

灵活性:支持自定义尺寸、裁剪、旋转等功能。

无外部依赖:仅依赖 Java 标准库。

在使用 Thumbnailator 之前,需要在项目中添加 Maven 依赖。

<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.14</version>
</dependency>


3、 基本使用示例

3.1 生成固定尺寸的缩略图

import net.coobird.thumbnailator.Thumbnails;
import java.io.File;
import java.io.IOException;


public class ThumbnailatorExample {
    public static void main(String[] args) throws IOException {
        Thumbnails.of("input.jpg")
                  .size(200, 200)
                  .toFile("output.jpg");
        System.out.println("缩略图已生成!");
    }
}

效果:将 `input.jpg` 缩放为 200x200 的缩略图,保存为 `output.jpg`。


3.2 生成带质量控制的缩略图

Thumbnails.of("input.jpg")
          .size(300, 300)
          .outputQuality(0.8)
          .toFile("output_quality.jpg");

说明:使用 `outputQuality` 方法指定输出图片的质量(范围:0.0 ~ 1.0)。


3.3 裁剪图片

Thumbnails.of("input.jpg")
          .sourceRegion(50, 50, 200, 200) // 裁剪区域
          .size(200, 200)
          .toFile("output_crop.jpg");

效果:从 `input.jpg` 裁剪 50,50 坐标起的 200x200 区域,保存为 `output_crop.jpg`。


3.4 将图片转换为其他格式

Thumbnails.of("input.jpg")
          .size(400, 400)
          .outputFormat("png")
          .toFile("output.png");

效果:将 `input.jpg` 转换为 PNG 格式,并保存为 `output.png`。


3.5 为图片添加水印

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;


BufferedImage watermark = ImageIO.read(new File("watermark.png"));
Thumbnails.of("input.jpg")
          .size(500, 500)
          .watermark(Positions.BOTTOM_RIGHT, watermark, 0.5f) // 水印位置与透明度
          .toFile("output_watermark.jpg");

效果:在图片右下角添加 `watermark.png` 作为水印。



4、 高级用法示例

4.1 批量处理图片

Thumbnails.of("img1.jpg", "img2.jpg", "img3.jpg")
          .size(200, 200)
          .toFiles(Rename.PREFIX_DOT_THUMBNAIL);

效果:为 `img1.jpg`、`img2.jpg`、`img3.jpg` 生成缩略图,文件名前添加 `thumbnail_` 前缀。


4.2 流式处理图片

import java.io.*;


try (InputStream is = new FileInputStream("input.jpg");
     OutputStream os = new FileOutputStream("output_stream.jpg")) {
    Thumbnails.of(is)
              .size(300, 300)
              .toOutputStream(os);

说明:可以直接处理输入流和输出流,适合文件上传等场景。


4.4 旋转图片

Thumbnails.of("input.jpg")
          .size(400, 400)
          .rotate(90) // 顺时针旋转 90 度
          .toFile("output_rotate.jpg");

效果:将图片顺时针旋转 90 度。



5. 常见问题与优化

内存占用过高:

对于大尺寸图片,可以使用 `.scale(double)` 方法以避免直接加载大图。

图片质量下降:

通过 `.outputQuality(double)` 控制图片压缩比。

格式兼容问题:

确保输入文件的格式支持,如 GIF 或 BMP 可能需要额外处理。



6. 总结

Thumbnailator 是一个功能强大且易用的图片处理库,可以大幅简化图片缩略图生成的复杂度。无论是简单的缩放还是复杂的批量处理,Thumbnailator 都能以高效的方式满足开发者需求。

相关文章

SITEFACTORY粘贴图片自动上传到服务器(JAVA版)

学校和政府单位用SiteFactory还是有一些,最近给客户做的一个网站,用的动易SiteFactory,用户是一个学校的,现在需要支持在SiteFactory中粘贴WORD图片,客户每天需要发新闻和...

wangEditor 实现ctrl+v粘贴图片并上传、word粘贴带图片

wangEditor 实现ctrl+v粘贴图片并上传、word粘贴带图片,wangEditor实现粘贴word图片,wangEditor实现粘贴word图文,wangEditor实现粘贴word,wa...

如何使用Java实现多张图片转换为视频

@Java讲坛杨33开发背景虽然前端也可以直接把一个几秒的视频传给后端,后端拿着这个视频继续做别的业务流程,但是前端这种操作的方式,有两个问题:打开摄像头录制视频会跳转到另外一个页面,对客户使用不友好...

SpringBoot整合阿里云OSS对象存储服务实现文件上传

1. 准备工作:一、首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间。二、创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文档,...

Google相似图片搜索的原理概述(图片搜索引擎谷歌)

上个月,Google把"相似图片搜索"正式放上了首页。你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。一个对话框会出现。你输入网片的网址,或者直接上传图片,Google就会...