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

createh54个月前 (02-01)技术教程22

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图片,客户每天需要发新闻和...

Java 图片压缩生成缩略图和水印(java实现图片压缩)

如今终端设备摄像头分辨率越来越高,拍照一张图片几兆甚至几十兆,我们需要对用户上传的图片适当压缩,在满足用户对图片质量的要求同时节约存储空间,减少网络传输,提高图片加载速度。本章将用Java原生API和...

Java基于Tinify实现4M图片无损压缩到1M

引言在当今的数字化时代,图片已成为网站、应用和社交媒体中不可或缺的元素。然而,大尺寸的图片不仅会增加页面或者客户端加载时间,还会占用大量的存储空间。为了解决这个问题,可以使用图片压缩工具来减小图片的尺...

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

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

43张图帮你快速理解Java30种常用框架(附相应学习笔记)

自1995年推出以来,Java始终处于首位,这使其成为有史以来最著名的软件编程语言之一。及时的更新和新版本发布使Java保持着活跃和竞争力。而在Java的成长史中,诸多能为开发节省大量时间的框架也是功...

一张图片即可入侵你的电脑(电脑被入侵图片)

一张看起来十分正常的可爱猫咪或美女图片,可以把恶意代码隐藏在图片像素中。当你点击这张图片时,计算机便会中招。印度安全研究人员萨米尔·沙哈把他发现的这种隐藏恶意程序的方法称为“stegosploit”,...