JavaDemo——java使用Thumbnails处理图片

thumbnailator是谷歌处理图片的开源工具类,可以对图片进行缩放,旋转,压缩,剪裁,添加水印,转换格式等;

参考api:http://coobird.github.io/thumbnailator/javadoc/0.4.8/net/coobird/thumbnailator/package-summary.html

maven引入:


	    net.coobird
	    thumbnailator
	    0.4.8
	

基本使用Demo:

/**
 * 2019年4月17日下午10:51:07
 */
package testThumbnailator;

import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

/**
 * @author xinwenfeng
 *
 */
public class TestThumbnailator {
	
	//API文档:http://coobird.github.io/thumbnailator/javadoc/0.4.8/net/coobird/thumbnailator/package-summary.html

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Thumbnails.of("BL_pre.jpg")
				.sourceRegion(Positions.CENTER, 500, 500)
//				.size(200, 300)
//				.width(100)
//				.height(200)
//				.forceSize(400, 400)
				.scale(0.8d)
//				.scale(0.5d, 0.8d)
//				.keepAspectRatio(false)
//				.rotate(90d)
				.watermark(Positions.CENTER, ImageIO.read(new File("watermark.png")), 0.8f)
				.outputQuality(0.75f)
				.outputFormat("JPEG")
//				.asBufferedImage()
				.toFile("out.jpeg");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

原图:

JavaDemo——java使用Thumbnails处理图片_第1张图片

水印:

JavaDemo——java使用Thumbnails处理图片_第2张图片

处理后:

JavaDemo——java使用Thumbnails处理图片_第3张图片

注:处理的图片必须指定大小,size,width,height,forcesize,scale;不可重复设置同一种类型的属性;有的属性设置会互斥;

1.读入源图片

可以批量处理,多个文件或者文件夹;

Thumbnails.of(BufferedImage... images) 从BufferedImage读入源;

Thumbnails.of(File... files) 从文件或者文件夹读入源;

Thumbnails.of(InputStream... inputStreams) 从流读入源;

Thumbnails.of(String... files) 

Thumbnails.of(URL... urls) 

2.设置大小,按比例或者拉伸

.size(int width, int height) 按比例,使原图撑满size大小;

.width(int width) 设置宽,高按比例;

.height(int height) 设置高,宽按比例;

.forceSize(int width, int height) 设置宽高,不按比例,会按照设置的宽高拉伸;

.scale(double scale) 按比例缩放,0~1缩小,1原比例,>1放大;

.scale(double scaleWidth, double scaleHeight) 长宽各自设置比例,会拉伸;

.scalingMode(ScalingMode config) 缩放模式(ScalingMode枚举BICUBIC、BILINEAR、PROGRESSIVE_BILINEAR);

.keepAspectRatio(boolean keep) 设置是否按比例,false不按比例;

注:size、width/height、scale、forceSize不能并用;size相当于width+height;forceSize相当于设置长款+keepAspectRatio=false,所以forceSize不能跟其他设置长款属性、keepAspectRatio并用;

3.剪裁

.sourceRegion(int x, int y, int width, int height) 剪裁原图,坐标x,y起始,剪裁出宽度width高度height的图像,x向右为正,y向下为正,width(向右)和height(向下)必须大于0;

.sourceRegion(Position position, int width, int height) 剪裁原图,区域位置position可用Positions枚举的9个位置或者实现Position接口的实现类;

.sourceRegion(Position position, Size size) 

.sourceRegion(Rectangle region) 

.sourceRegion(Region sourceRegion) 

.crop(Position position) 剪裁生成的缩略图,按照size设定剪裁;

4.旋转

.rotate(double angle) 旋转角度,顺时针为正;

5.水印

.watermark(BufferedImage image) 中心位置50%透明度设置水印;

.watermark(BufferedImage image, float opacity) 中心位置,opacity的不透明度设置水印(0.0<=opacity<=1.0);

.watermark(Position position, BufferedImage image, float opacity) 在position位置,opacity不透明度设置水印;

.watermark(Watermark w) 

6.质量

.outputQuality(double quality) 质量0.0<=quality<=1.0;

.outputQuality(float quality) 

7.输出格式

.outputFormat(String format) 设置输出格式(可用ImageIO.getWriterFormatNames()获得支持的格式),[JPG, jpg, bmp, BMP, gif, GIF, WBMP, png, PNG, wbmp, jpeg, JPEG];

.outputFormatType(String formatType) 

.useOriginalFormat() 使用原图格式;

8.输出图片

.asBufferedImage() 返回BufferedImage对象;

.asBufferedImages() 返回多个BufferedImage对象;

.asFiles(Rename rename) 返回文件列表,并按照重命名规则生成文件(Rename抽象类属性:Rename.NO_CHANGE 名称不变,Rename.PREFIX_DOT_THUMBNAIL 名称前缀“thumbnail.”,Rename.PREFIX_HYPHEN_THUMBNAIL 名称前缀“thumbnail-”,Rename.SUFFIX_DOT_THUMBNAIL 名称后缀“.thumbnail”,Rename.SUFFIX_HYPHEN_THUMBNAIL 名称后缀“-thumbnail”);

.asFiles(File destinationDir, Rename rename) 返回文件列表,并按照指定的重命名规则生成到指定目录里(文件夹要存在);

.asFiles(Iterable iterable) 

.toFile(File outFile) 无返回,写入文件里(如果没有后缀名会自动添加,下同);

.toFile(String outFilepath) 

.toFiles(File destinationDir, Rename rename) 无返回,按照重命名规则生成到文件夹里;

.toFiles(Iterable iterable) 

.toFiles(Rename rename) 

.toOutputStream(OutputStream os) 无返回,写入outputStream里;

.toOutputStreams(Iterable iterable) 

.allowOverwrite(boolean allowOverwrite) 设置是否覆盖已存在的文件(只对toFile、toFiles、asFiles有效);

 

其他方法和功能见api

你可能感兴趣的:(JavaDemos)