java中如何使用Thumbnails处理图片呢?

戚薇 Java经验 发布时间:2023-06-25 10:18:19 阅读数:11940 1
下文笔者讲述使用java代码操作Thumbnails工具类的方法及示例分享
学习完本篇之后,你将掌握Thumbnails工具类对图片进行缩放,旋转,压缩,剪裁,添加水印,转换格式的技巧,如下所示

thumbnailator简介

thumbnailator:
    是谷歌处理图片的开源工具类
Thumbnailator:
    可使用很少的代码实现图片的压缩功能
Thumbnailator也提供给图片缩放、旋转与加水印等功能

thumbnailator使用方法

github地址
   https://github.com/coobird/thumbnailator
maven的地址
	 <dependency>
	   <groupId>net.coobird</groupId>
	   <artifactId>thumbnailator</artifactId>
	   <version>0.4.8</version>
	</dependency>
 
 1.图片压缩
  Thumbnails.of("原图文件的路径")
        .scale(0.5)
        .toFile("压缩后文件的路径");
  //修改图片大小 
 Thumbnails.of("原图文件的路径")
         .size(100, 75)
         .toFile("压缩后文件的路径"); 

//设置宽为原图100%,高为原图50%,非等比例缩放
Thumbnails.of("原图文件的路径")
    .scale(1.0, 0.5)
    .toFile("压缩后文件的路径");
//参数说明
	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(0.8)
	.rotate(90)
	.toFile("转换后文件的路径");

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(位置,水印图,透明度)

//修改文件格式
	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为最高质量
package com.java265;
 
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;
 
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();
		}
	}
 
}

thumbnailator常见方法说明

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<File> iterable) 

.toFile(File outFile) 无返回,写入文件里(如果没有后缀名会自动添加,下同);
.toFile(String outFilepath) 
.toFiles(File destinationDir, Rename rename) 无返回,按照重命名规则生成到文件夹里;
.toFiles(Iterable<File> iterable) 
.toFiles(Rename rename) 
.toOutputStream(OutputStream os) 无返回,写入outputStream里;
.toOutputStreams(Iterable<? extends OutputStream> iterable) 
.allowOverwrite(boolean allowOverwrite) 设置是否覆盖已存在的文件(只对toFile、toFiles、asFiles有效)
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202306/16876595426891.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者