springboot 整合thumbnailator- 图片压缩

本文详细介绍了如何使用Thumbnailator库进行图片处理,包括设置图片尺寸、按比例缩放、添加水印、图片旋转以及裁剪等操作。通过实例代码展示了不同参数设置下的图片处理效果,如保持原图比例缩放、自定义尺寸放大缩小、添加透明水印以及旋转图片等。此外,还提到了其他可用的API,如调整图片质量、输出格式等。

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

引入依赖,maven下载:

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

支持:

图片缩放、图片压缩、区域裁剪、添加水印、图片旋转。

API

1、Thumbnails.of(resource)  是一个重载方法,用String类型,表示图片原始路径,参数如下:

 2、Thumbnails.of(resource).size(int width, int height) 缩放大小

        规则一:当设定缩放的图片宽和高(102*150)都小于原来图片的宽和高(600*879),图片按比例缩小,最后缩完宽为102或高为150。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .size(160, 150).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

原始图片:缩小完的图片:

 

        规则二:当设定缩放的图片宽和高(1600*1500)都大于原来图片的宽和高(600*879),图片按比例放大,最后缩完宽为1600或高为1500

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .size(1600, 1500).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

原始图片:  缩放完的图片大小:

 

         规则三:当设定缩放的图片宽和高(400*1500),原来图片的宽和高(600*879),宽比原来的小,高比原来的大,最后缩完 宽会缩小到400,图片比例保持不变。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .size(400, 1500).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

原始图片:  缩放完的图片大小:

 

          规则四:当设定缩放的图片宽和高(1500*400),原来图片的宽和高(600*879),宽比原来的大,高比原来的小,最后缩完 高会缩小到400,图片比例保持不变。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .size(1500, 400).toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

原始图片:  缩放完的图片大小:​​​​​​​

 

 3、 Thumbnails.of().size().toFile() 生成图片的路径,图片生成到哪里

重载的参数:

 

如果与原图图片路径及图片名一样,会覆盖原始图片! 

 4、Thumbnails.of().scale( double count ).toFile() ​​​​​​​指定比例放大或缩小,参数小于1缩小;参数大于1放大。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .scale(2)
                .toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

原始图片:缩完、放大后的图片

 5、添加水印 watermark() 

 Thumbnails.of() .scale() .watermark(Position position, ImageIO.read(new File(String "图片水印的路径")), float opcity) .toFile()

该方法是一个重载方法:

参数一:Position 生成水印的位置,Position这个接口有对应的实现类,下边我使用的是Positions这个实现类;

参数二:水印的路径,需要返回一个 BufferedImage,使用 ImageIO.read(new File(String "图片水印的路径")) 会返回此类型;

参数三:透明度,float类型的,0 ~ 1。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .scale(1)
                .watermark(Positions.TOP_CENTER, ImageIO.read(new File("C:\\Users\\Administrator\\Desktop\\6.jpg")), 0.7f)
                .toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

 6、rotate(double angle) 图片旋转,参数是旋转的角度。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .scale(1)
                .rotate(90d)
                .toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

旋转之后效果图:

 

 7、sourceRegion(Position postion, int width, int height) 图片裁剪。

参数一:裁剪的位置;

参数二和参数三:图片的宽和高。

@Test
void contextLoads() {
    try {
        Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg")
                .scale(1)
                .sourceRegion(Positions.CENTER, 400, 500)
                .toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg");
    } catch (IOException e) {
        System.out.println("e"+e);
        e.printStackTrace();
    }
}

裁剪完是红框的部分:

 

 8、还有几个API 如下:

(1)keepAspectRatio(boolean arg) 图片是否按比例缩放,默认为true;

(2)outputQuality(float arg) / outputQuality(double arg) 图片质量;

区间从0.0 ~ 1.0 

 (3)outputFormat(String arg) 图片格式转换。

下边是源码中官方给出的案例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值