图片处理框架thumbnailator解析

本文介绍了Thumbnailator这个图片处理库,包括如何按长宽约束比例压缩图片、直接调整图片大小以及裁剪图片。示例代码展示了Thumbnailator的便捷用法,如使用of()方法处理不同类型的输入,并通过toFile()方法输出到指定路径。对于大尺寸图片的裁剪,文章建议先压缩再裁剪以保留更多内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Thumbnailator 包是处理图片缩略图的,可以对图片进行裁剪,修改格式,压缩等等。非常的方便。

Thumbnailator压缩图片

按长宽约束比例压缩

简单例子代码直接上手

Thumbnails.of("D:\\Images\\0gkZ4L5sxt.jpg")//输入路径
                    .size(100,100)//按长宽比例约束进行图片压缩至长宽限定的范围内
                    .toFile("D:\\1.jpg");//输出路径

其中of()方法可以接受三种类型的输入。

  • String字符串相关的路径
  • File类型的文件
  • BufferedImage类型

其中toFile()方法可以接受两种类型的输出

  • String字符串相关的路径
  • File类型

直接压缩图片的大小

Thumbnails.of(file)
        .scale(0.1)      //将长宽按照指定的比例压缩
        .toFile(file);

例如当原图片为300 * 300像素
scale中的为0.1
得到的图片的为30 * 30像素大小

Thumbnailator裁剪图片

Thumbnails.of(file)
        .sourceRegion(Positions.CENTER,100,200)//从中心区域取像素100*200
        .size(100,200)//生成100*200大小的图片
        .toFile(file);

在上述的裁剪代码中如果图片过大,我们这么裁剪会丧失很多画面内容,例子:
图1
图片的分辨率为4852 * 2823
执行上面的代码生成的图片如下:
这里写图片描述
我们其实想把图片先压缩然后再取中间的100 * 200像素。
这种情况下就需要BufferedImage来实现

private void processImage(File file, int widthThreshold, int heightThreshold) {

        double imageRatio = (double) widthThreshold / (double) heightThreshold;

        BufferedImage imageTemp = null;
        try {
            BufferedImage image = ImageIO.read(file);
            int width = image.getWidth();
            int height = image.getHeight();
            //根据长宽比来确定按那个边来压缩
            if ((double) width / height < imageRatio) {
                imageTemp = Thumbnails.of(file).width(widthThreshold).asBufferedImage();
            } else {
                imageTemp = Thumbnails.of(file).height(heightThreshold).asBufferedImage();
            }

            Thumbnails.of(imageTemp).sourceRegion(Positions.CENTER, widthThreshold, heightThreshold)
                    .size(widthThreshold, heightThreshold).toFile(file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

执行完上述代码后图片为:保留了图片的更多内容
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值