Java 图片处理还在用 ImageIO?这个库让你代码从 30 行变 3 行

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

在 Java 开发中,图片处理是一个高频需求------用户头像裁剪、商品缩略图生成、图片压缩瘦身、水印添加等场景无处不在。Java 原生提供了 ImageIOBufferedImage 等 API 来处理图像,但代码冗长、易出错、效果一般。

Thumbnailator 是一个专为缩略图生成设计的开源 Java 类库,以极简的链式 API 和出色的处理效果著称。本文将系统介绍 Thumbnailator 的使用方法.

02 简介

Thumbnailator 是一个用于生成图像缩略图的 Java 开源类库,由 Chris Kroells 开发,托管于 GitHub,采用 MIT 许可证。它的设计哲学是"简洁即美"------用一行链式调用替代原生 ImageIO 几十行的繁琐代码。

GitHub已经收获了5.4kstar。虽然已经很多时间没有更新了,但是足够我们使用了,目前最新版本0.4.21, 发布于2025年。

GitHub地址:github.com/coobird/thu...

03 快速开始

3.1 Maven依赖

xml 复制代码
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.21</version>
</dependency>

Maven中央仓库:central.sonatype.com/

3.2 生成缩略图

java 复制代码
@Test
void test01() throws IOException {
        Thumbnails.of(imagePath)
                .size(200, 200)
                .toFile(targetBasePath + "ygyz_200x200.jpg");
}

结果如图:

还可以配合比例缩放、强制指定尺寸等:

java 复制代码
 // 方式二:按比例缩放
Thumbnails.of("input.jpg")
    .scale(0.5)          // 缩放为原图的 50%
    .toFile("scaled.jpg");

// 方式三:强制指定尺寸(可能变形)
Thumbnails.of("input.jpg")
    .size(200, 200)
    .keepAspectRatio(false)
    .toFile("forced.jpg");

3.3 质量控制与格式转换

java 复制代码
@Test
void test02() throws IOException{
    Thumbnails.of(imagePath)
            .scale(1.0)                    // 保持原尺寸
            .outputFormat("png")           // 输出格式
            .outputQuality(0.8)            // JPEG 质量 80%
            .toFile(targetBasePath + "ygyz_80.png");
}

3.4 添加水印

java 复制代码
@Test
void test03() throws IOException{
    BufferedImage watermark = ImageIO.read(new File(watermarkPath));

    Thumbnails.of(imagePath)
            .size(1024, 768)
            .watermark(Positions.BOTTOM_RIGHT, watermark, 0.5f)  // 位置、水印图、透明度
            .outputQuality(0.9)
            .toFile(targetBasePath + "watermarked.jpg");
}

3.5 旋转图片

java 复制代码
@Test
void test04() throws IOException{
    Thumbnails.of(imagePath)
            .size(800, 600)
            .rotate(90)                    // 顺时针旋转 90 度
            .toFile(targetBasePath +"rotated.jpg");
}

3.6 区域裁剪

java 复制代码
@Test
void test05() throws IOException{
    // 从中心裁剪 400x400 区域,再缩放为 200x200
    Thumbnails.of(imagePath)
            .sourceRegion(Positions.CENTER, 400, 400)
            .size(200, 200)
            .keepAspectRatio(false)
            .toFile(targetBasePath + "cropped.jpg");
}

04 小结

Thumbnailato 是 Java 生态中图片缩略图生成的首选工具库 ,它用极简的链式 API 封装了 ImageIOJava2D 的底层复杂性,让开发者能用一行代码完成原生 API 几十行才能实现的功能。

知道的估计已经玩烂了,不知道的可能还不知道。不知道的老铁快去试试吧!

相关推荐
嘻哈baby1 小时前
Rust 是不是就相当于新时代的 C 语言?
后端
数据狐(Datafox)1 小时前
mercadolibre.item_get 工程实战:美客多商品详情API技术解析与落地应用
java·人工智能·mysql·json
~木雨1 小时前
Java 内部类系列④(收官):内部类底层与版本演进全梳理 —— 合成字段、nestmates 与 JDK18 优化,附全套面试背诵表
java·字节码·内部类·java 面试·nestmates·jdk18
IT_陈寒1 小时前
Redis持久化配置漏了这一步,线上数据丢了5小时
前端·人工智能·后端
吴声子夜歌1 小时前
Guava——反射
java·开发语言·guava
Moment1 小时前
太好了!NestJS 12 大版本转向 ESM,新项目默认构建换 Rspack
前端·javascript·后端
涛涛ing1 小时前
一周之内,前端 AI 编程的格局被彻底改写了三次
前端·程序员
名字还没想好☜1 小时前
Go 用 -race 抓数据竞争:一个偶发崩溃的排查、原理与修复
开发语言·后端·golang·go
X1A0RAN2 小时前
Jenkins 流水线跨阶段的数据共享:让变量“动态更新“成为可能
java·servlet·jenkins