同福

Java使用Thumbnailator生成图片的缩略图【20210514】

介绍

介绍

上传图片功能是大多数网站平台一定会有的功能。用户上传的图片大小都不一样,格式也不一样,所以我们得到用户上传的文件之后一定需要进行统一格式、尺寸的处理,也就是说生成图片的缩略图。

今天福哥就找到了Thumbnailator这个工具,用它来生成图片缩略图,非常方便好用!

配置

在pom.xml增加依赖项

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

代码

等比例缩小

使用scale方法对图片根据比例缩小,只需要传递一个参数。

代码

缩小图片到1/10大小

try {
    Thumbnails.of("D:/test.jpg")
            .scale(0.1)
            .toFile("D:/test_(0.1).jpg");
}
catch (IOException e){
    e.printStackTrace();
}

原图

这是用单反拍的一张图,因为很大,所以福哥就截取了中间的一块内容。

3689ef3eae3197dd.jpg

缩略图

可以看到图片完全看出来了,而且变得很小。

782bbc62e1f88579.jpg

不同比例缩小

使用scale方法对图片根据比例缩小,如果传递两个参数,第一个参数就是宽度的缩小比例,第二个参数就是高度的缩小比例。

代码

使用不同比例缩小图片,宽度缩小到1/10,高度缩小到15/100。

try {
    Thumbnails.of("D:/test.jpg")
            .scale(0.1, 0.15)
            .toFile("D:/test_(0.1-0.15).jpg");
}
catch (IOException e){
    e.printStackTrace();
}

缩略图

可以看到图片的比例被破坏了

702fea316efe0215.jpg

根据具体尺寸缩小

通过size方法进行具体的尺寸进行缩小。缩小的规则是以原图长边为基准,再保证长边和size方法参数相等的前提下等比例缩小短边。

代码

try {
    Thumbnails.of("D:/test.jpg")
            .size(518, 518)
            .toFile("D:/test_(518-518).jpg");

    Thumbnails.of("D:/test.jpg")
            .size(640, 480)
            .toFile("D:/test_(640-480).jpg");

    Thumbnails.of("D:/test.jpg")
            .size(480, 640)
            .toFile("D:/test_(480-640).jpg");
}
catch (IOException e){
    e.printStackTrace();
}

缩略图

当传入518x518参数的时候,生成的图片尺寸是518x345。

3e828da07084a21a.jpg

当传入640x480参数的时候,生成的图片尺寸是640x427

b9f74f7b37ab54c8.jpg

当传入480x640参数的时候,生成的图片尺寸是480x320

59f4cadc3102a6de.jpg

旋转角度

使用rotate方法对图片进行旋转处理,这里面有个问题就是使用rotate之前必须进行缩小(就是必须调用scale或者size)才可以。

代码

try {
    Thumbnails.of("D:/test.jpg")
            .scale(1f)
            .rotate(180)
            .toFile("D:/test_rotate.jpg");
}
catch (IOException e){
    e.printStackTrace();
}

缩略图

可以看到图片倒过来了。

51943e7bf4a1d023.jpg

转换格式

使用outputFormat方法对图片格式进行转换,使用outputFormat之前也必须进行缩小(就是必须调用scale或者size)才可以。

代码

这里面通过outputFormat改成了png格式,图片就不提供截图了,看不出区别。

try {
    Thumbnails.of("D:/test.jpg")
            .scale(1f)
            .outputFormat("png")
            .toFile("D:/test.png");
}
catch (IOException e){
    e.printStackTrace();
}

图片质量

可以使用outputQuality调整图片的质量。

添加水印

可以使用watermark给图片增加水印。

总结

今天我们学习了使用Thumbnaillator对图片进行缩小、旋转、格式转换的处理,大家可以发现其实单独使用Thumbnailator在一些情况下,还是无法满足需求的。比如:福哥在给用户生成头像的时候需要对原图进行裁剪之后再进行缩小处理,这个只靠Thumbnailator是无法实现的。

这个后面福哥会逐步教给大家,敬请期待~~