简介

Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理速度快,代码简洁。

可实现的功能如下:
A.缩放(指定大小、指定比例);
B.旋转;
C.降低图片质量来压缩图片;
D.水印;
E.裁剪;
F.转换图片类型;
G.处理后输出到OutputStream、BufferedImage。

依赖

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

起步

这个类库起手就是Thumbnails.of(A)方法,这个A可以是String类型的图片路径,可以是File对象,可以是InputStream,可以是BufferedImage。

缩放

1.指定宽高缩放比例进行缩放

// scale方法设置缩放比例
// 若宽高相同比例,只需要一个参数即可
Thumbnails.of(imagepath)
           .scale(0.5)
           .toFile(newimageth);

// 宽高不同比例,两个参数
Thumbnails.of(imagepath)
           .scale(1, 0.5)
           .toFile(newimageth);

2.指定宽高的数值进行缩放

// fontSize方法指定宽、高的数值
Thumbnails.of(imagepath)
           .forceSize(100, 300)
           .toFile(newimageth);

// size方法和fontsize方法类似,但是size方法会保证图片的宽高比例(不会变形)
Thumbnails.of(imagepath)
           .size(100, 300)
           .toFile(newimageth);
// 或者可以这么写
Thumbnails.of(imagepath)
           .forceSize(100, 300)
	   .keepAspectRatio(false)        //不保持比例
           .toFile(newimageth);

旋转

rotate方法,参数为旋转的角度(正数:顺时针,负数:逆时针)。

Thumbnails.of(imagepath)
           .scale(1.0)
           .rotate(90)
	   .toFile(newimageth);  

压缩图片(降低图片质量)

outputQuality方法设置图片的清晰度;outputFormat可修改图片的类型。
注意:使用该方法时,图片格式必须为jpg;如果要使用其他类型的图片类型,可以tofile的时候指定文件后缀。

Thumbnails.of(imagepath)
           .scale(1.0)
            .outputQuality(0.25)
            .outputFormat("jpg")
            .toFile(newimageth);

水印

watermark方法添加水印,第一个参数为水印的位置,第二个参数为水印图片,第三个参数为水印图片的透明度。
注意:水印图片是BufferedImage类型的,如果要添加文字水印,可以自己造一个;如果对图片有什么修改,可以直接用Thumbnailator类库。

// 水印图片
BufferedImage waterMarkImage = ImageIO.read(new File(waterMarkImagePath));
// 添加水印
Thumbnails.of(imagepath)
                .scale(1.0)
                .watermark(Positions.BOTTOM_RIGHT, waterMarkImage, 0.5f)
                .toFile(newimageth);

转换图片类型

outputFormat指定处理后的图片类型

Thumbnails.of(imagepath)
                .scale(1.0)
                .outputFormat(图片类型)  
                .toFile(newimageth);  

处理后输出到OutputStream、BufferedImage

// 输出到OutputStream  
OutputStream os = newFileOutputStream(newimageth);  
Thumbnails.of(imagepath)  
    .scale(1.0)  
    .toOutputStream(os);  
// 输出到BufferedImage
BufferedImage bufferedImage=Thumbnails.of(imagepath)  
    .scale(1.0) 
    .asBufferedImage();  

裁剪图片

sourceRegion方法指定需要的图片区域:
A.方法一:第一个参数为图片中的位置,第二个、第三个参数为裁剪区域的大小;
B.方法二:以坐标的形式,选择裁剪区域。

Thumbnails.of(imagepath)  
    .sourceRegion(Positions.CENTER,400,400)  
    .size(200,200)  
    .toFile(newimageth);  

Thumbnails.of(imagepath)  
    .sourceRegion(600,500,400,400)  
    .size(200,200)  
    .toFile(newimageth);  

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

一个喜欢拔刀的萌新Coder