Thumbnailator简介和示例

背景

对于javaweb服务端开发人员,图片资源的管理总是绕不开的一环。很多网站上都会提供上传图片这个功能,而现代数码设备拍摄出来的都是高清图片,分辨率很高,占用的空间也很大。物理存储的问题还算容易解决,但是网络带宽太紧张了。一个页面动则就几十M,那加载速度就会很慢,所以图片的压缩就必不可少了。

图片压缩要求

  • 压缩程度可控。
  • 压缩之后图片尽可能的不失真。
  • 压缩速度要快。
  • 代码简单,依赖较少。

技术选型

目前处理图片主流的有两种,第一种依赖环境需要安装imageMagick和GraphicsMagick,第二种是使用Thumbnailator类库,相对来说Thumbnailator在处理图片的时候还原度没有第一种的好,不过胜在实现简单,且能满足绝大多数的情况。

Thumbnailator简介

对于图片处理,JDK中也提供了对应的工具类,不过处理起来会很麻烦,而Thumbnailator是一个Google开源的优秀图片处理的第三方Java类库,处理效果远比Java API的好。

Thumbnailator可以使用很少的代码实现图片的压缩功能,当然了,Thumbnailator也提供给图片缩放、旋转与加水印等功能。

使用方式

github地址
https://github.com/coobird/thumbnailator

maven的地址
maven引入jar文件

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

示例

示例1:

在目录中创建图像文件的JPEG缩略图,将它们全部调整为最大尺寸为640像素乘480像素,同时保留原始图像的长宽比。

    public static void main(String[] args) throws IOException {
        String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator";
        Thumbnails.of(new File(filePath).listFiles())
                .size(640, 480)
                .outputFormat("jpg")
                .toFiles(Rename.PREFIX_DOT_THUMBNAIL);
    }

Thumbnailator提供的流畅接口简化了将缩略图制作为单个方法调用的任务!

无需访问Image I / O API并BufferedImage通过Graphics2D对象手动操作。Thumbnailator为您完成所有这些工作。
效果
在这里插入图片描述

示例二:

从图像文件创建缩略图:将Img1.jpg调整图片的大小,然后保存到Img1_thumbnail.jpg。

    public static void main(String[] args) throws IOException {
        String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
        String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
        Thumbnails.of(new File(filePath))
                .size(640, 480)
                .toFile(new File(newFilePath));
    }

或者,Img1_thumbnail将接受文件名作为String。File不需要使用对象来指定图像文件:

    public static void main(String[] args) throws IOException {
        String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
        String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
        Thumbnails.of(filePath)
                .size(640, 480)
                .toFile(newFilePath);

在编写快速的原型代码时,或者在脚本语言中使用Thumbnailator时,此格式很有用。

示例三:

图片旋转

//scale
Thumbnails.of("原图文件的路径")
	.scale(0.8)
	.rotate(90)
	.toFile("转换后文件的路径");
	
//size
Thumbnails.of(“原图文件的路径”)
	.size(40,40)
	.rotate(90)
	.toFile(“转换后文件的路径”);

其中,
rotate(角度): 正数:顺时针 负数:逆时针
scale,size 必须有一个有值

加水印

File image = new File("水印图片地址");
Thumbnails.of("原图文件的路径")
	.scale(0.8)
	.watermark(Positions.BOTTOM_RIGHT, ImageIO.read(image), 0.5f)
	.toFile("转换后文件的路径");

其中
Watermark:添加水印 watermark(位置,水印图,透明度)

创建带有旋转和水印的缩略图

        String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
        String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
        String watermark = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img2.jpg";
        Thumbnails.of(new File(filePath))
                .size(640, 480)
                .rotate(90)//顺时针旋转90度
                .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File(watermark)), 0.7f)//水印
                .outputQuality(0.8)
                .toFile(new File(newFilePath));
    }

在此示例中,将Img1.jpg调整图片的大小,然后将其顺时针旋转90度,然后在右下角放置半透明(0.7f)的水印,然后将其保存为Img1_thumbnail.jpg 80%的压缩质量设置。

示例四:

创建缩略图并写入 OutputStream

OutputStream os = ...;
		
Thumbnails.of("large-picture.jpg")
        .size(200, 200)
        .outputFormat("png")
        .toOutputStream(os);

在此示例中,文件中的图像large-picture.jpg被调整为最大尺寸为200 x 200(保持原始图像的纵横比),并将该图像写入指定OutputStream的PNG图像中。

示例五

创建固定大小的缩略图

BufferedImage originalImage = ImageIO.read(new File("original.png"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .size(200, 200)
        .asBufferedImage();

上面的代码使用拍摄图像,originalImage并使用创建一个200像素乘200像素的缩略图,并将结果存储在中thumbnail。

或者,thumbnail将接受文件名作为String。File不需要使用对象来指定图像文件:

Thumbnails.of("原图文件的路径")
    .size(100, 75)
	.toFile("压缩后文件的路径"); 

示例六:

按给定因子缩放图像

BufferedImage originalImage = ImageIO.read(new File("original.png"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .scale(0.25)
        .asBufferedImage();

上面的代码将图像originalImage导入,并创建一个占原始图像25%的缩略图,并使用默认的缩放技术以制作存储在中的缩略图thumbnail。

或者,thumbnail将接受文件名作为String。File不需要使用对象来指定图像文件:

Thumbnails.of("原图文件的路径")
        .scale(0.5)
        .toFile("压缩后文件的路径");

示例七:

创建缩略图时旋转图像

BufferedImage originalImage = ImageIO.read(new File("original.jpg"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .size(200, 200)
        .rotate(90)
        .asBufferedImage();

上面的代码获取原始图像并创建一个缩略图,该缩略图将顺时针旋转90度。

示例八:

创建带有水印的缩略图

BufferedImage originalImage = ImageIO.read(new File("original.jpg"));
BufferedImage watermarkImage = ImageIO.read(new File("watermark.png"));

BufferedImage thumbnail = Thumbnails.of(originalImage)
        .size(200, 200)
        .watermark(Positions.BOTTOM_RIGHT, watermarkImage, 0.5f)
        .asBufferedImage();

如图所示,可以通过调用该watermark方法将水印添加到缩略图。

可以从Positions枚举中选择位置。

可以通过更改最后一个参数来调整缩略图的不透明度(或相反,透明度),最后一个参数0.0f是缩略图完全透明,而1.0f水印则完全不透明。

示例九:

将缩略图写入特定目录

File destinationDir = new File("path/to/output");

Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg")
        .size(200, 200)
        .toFiles(destinationDir, Rename.PREFIX_DOT_THUMBNAIL);

本示例将获取源图像,并将缩略图作为文件写到destinationDir(path/to/output目录),同时thumbnail.以文件名开头重命名它们。

因此,缩略图将作为文件写入:

path/to/output/thumbnail.apple.jpg
path/to/output/thumbnail.banana.jpg
path/to/output/thumbnail.cherry.jpg

在写入指定目录时,还可以保留原始文件名:

File destinationDir = new File("path/to/output");

Thumbnails.of("apple.jpg", "banana.jpg", "cherry.jpg")
        .size(200, 200)
        .toFiles(destinationDir, Rename.NO_CHANGE);

在上面的代码中,缩略图将被写入:

path/to/output/apple.jpg
path/to/output/banana.jpg
path/to/output/cherry.jpg

示例十:

设置宽高最大值,等比例缩小

Thumbnails.of("原图文件的路径")
    .scale(1.0, 0.5)
	.toFile("压缩后文件的路径");

设置宽为原图100%,高为原图50%,非等比例缩放
其中,

  • scale: 按照比例进行缩放。范围:0.0~N。
  • scale(0.5) 宽高比例都是50%缩放 , scale(1,0.5) 宽不变,高为50%缩放
  • size:指定大小进行缩放 size(100, 75)
    若图片宽比100小,高比75小,不变
    若图片宽比100小,高比75大,高缩小到75,图片比例不变
    若图片宽比100大,高比75小,宽缩小到100,图片比例不变
    若图片宽比100大,高比100大,图片按比例缩小,宽缩小到100或高缩小到75,但要保证宽小于等于100,高小于等于75

修改文件格式

Thumbnails.of(“原图文件的路径”)
	.scale(1f)
	.outputFormat(“jpg”)
	.toFile(“转换后文件的路径”);

其中,
outputFormat:设置转换后图片格式,之前听说该属性设置为png时,scale缩放属性无效,测试用0.4.8的版本已经能正常缩放了

不改变宽高,压缩大小

Thumbnails.of("原图文件的路径")
        .scale(1f)
        .outputQuality(0.5f)
        .toFile("压缩后文件的路径");

其中,
outputQuality: 输出的图片质量,范围:0.0~1.0,1为最高质量.

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: thumbnailator是一个用于生成图片的Java库。它提供了一组简单易用的API,使开发人员能够轻松地对图像进行处理和操作。 thumbnailator支持各种常见的图像处理操作,包括裁剪、缩放、旋转、翻转等。开发人员可以通过指定目标图像的宽度和高度来实现缩放操作,也可以通过指定裁剪区域的坐标和大小来实现裁剪操作。此外,thumbnailator还提供了丰富的选项,如指定输出图片的格式、质量、压缩比等,以满足不同需求的图像处理。 除了基本的图像处理功能外,thumbnailator还支持添加水印、生成缩略图等高级功能。添加水印可以通过指定水印的位置、透明度、大小和旋转角度等参数来实现。生成缩略图可以根据原始图像自动计算缩放比例,以适应不同尺寸的缩略图需求。 thumbnailator的文档提供了详细的API说明和示例代码,使开发人员能够快速上手和使用。文档中包含了对各个API方法的介绍、参数说明以及用例示例,方便开发人员理解和使用。此外,文档还提供了常见问题解答和使用建议,帮助开发人员解决常见问题和优化图像处理的效果。 总的来说,thumbnailator是一个功能强大、易用性高的图像处理库,通过其丰富的API和详细的文档,开发人员可以轻松地实现各种图像处理操作。无论是生成缩略图、裁剪图像还是添加水印等,thumbnailator都能满足开发人员的需求。 ### 回答2: thumbnailator是一个用于生成缩略图的Java库。它提供了简单易用的API,帮助开发人员轻松地对图像进行缩放、裁剪、旋转和添加水印等操作。 使用thumbnailator生成缩略图非常简单。首先,我们需要引入thumbnailator库并创建一个Thumbnailator对象。然后,可以使用该对象根据需求进行图像处理操作。例如,可以使用scale()方法对图像进行缩放,crop()方法对图像进行裁剪,rotate()方法对图像进行旋转以及watermark()方法添加水印等。 除了基本的图像处理功能,thumbnailator还提供了一些高级功能。例如,可以通过outputQuality()方法设置输出图像的质量,通过outputFormat()方法设置输出图像的格式。此外,还可以在缩略图上添加文字或图片水印,并设置水印的位置和透明度等。 thumbnailator还支持批量处理图像。通过使用iterate()方法和Files类中的相关方法,可以轻松地对文件夹中的所有图像进行相同的处理操作。 总之,thumbnailator是一款功能强大且易于使用的Java库,它能够帮助开发人员快速生成缩略图并对图像进行各种操作。无论是对个别图像进行处理还是批量处理文件夹中的所有图像,thumbnailator都能提供便捷的解决方案。 ### 回答3: Thumbnailator是一个用于生成和处理图像缩略图的Java库。它提供了简单易用的API,使得在Java应用程序中生成缩略图变得非常方便。 使用Thumbnailator,可以轻松地加载原始图像,并根据需要生成不同大小的缩略图。它支持指定缩放比例、固定宽度或高度、自定义裁剪等多种缩放方式。同时,还可以对生成的缩略图进行旋转、添加水印、加入边框等图像处理操作。 使用Thumbnailator的主要步骤包括加载原始图像、指定缩放方式和参数、生成缩略图并保存。对于需要添加水印或进行其他处理的情况,还可以通过链式调用的方式在生成缩略图之前进行相应的处理操作。 除了定义缩略图生成的参数外,Thumbnailator还提供了一些配置选项,用于控制生成缩略图的质量、格式和其他属性。例如,可以指定JPEG图片的压缩质量、设置输出格式为PNG、GIF等。 总的来说,Thumbnailator提供了一个方便、高效的方式来处理图像缩略图。它的API易于使用,任何有Java编程基础的人都可以很快上手。无论是在网站开发、图片处理工具开发还是其他需要生成和处理缩略图的场景,Thumbnailator都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strggle_bin

一毛不嫌少,十元不嫌多

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值