java中如何使用Thumbnails处理图片呢?
下文笔者讲述使用java代码操作Thumbnails工具类的方法及示例分享
学习完本篇之后,你将掌握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有效)
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


