参考:https://blog.csdn.net/yhhazr/article/details/
https://blog.csdn.net/simonchi/article/details/
http://code.google.com/p/thumbnailator/
目录
maven dependency
net.coobird
thumbnailator
0.4.8
版本号自己关注下更新
场景应用
指定大小进行缩放
//size(宽度, 高度) /* * 若图片横比200小,高比300小,不变 * 若图片横比200小,高比300大,高缩小到300,图片比例不变 * 若图片横比200大,高比300小,横缩小到200,图片比例不变 * 若图片横比200大,高比300大,图片按比例缩小,横为200或高为300 */ Thumbnails.of("images/a380_1280x1024.jpg") .size(200, 300) .toFile("c:/a380_200x300.jpg"); Thumbnails.of("images/a380_1280x1024.jpg") .size(2560, 2048) .toFile("c:/a380_2560x2048.jpg");
单个图片等比例缩放
File file = new File("c:\\test.png"); Thumbnails.of(new FileInputStream(file)).scale(3.0).toFile(new File("c:\\yyyyy.png"));
3.0是一个double类型的数字,缩放比例,大于1就是变大,小于1就是缩小
不按照比例,指定大小进行缩放
//keepAspectRatio(false) 默认是按照比例缩放的 Thumbnails.of("images/a380_1280x1024.jpg") .size(200, 200) .keepAspectRatio(false) .toFile("c:/a380_200x200.jpg");
批量产生缩略图
Thumbnails.of(new File("D:\\pics").listFiles()).scale(0.2).outputFormat("png") .toFiles(Rename.PREFIX_DOT_THUMBNAIL);

控制图片质量,图片尺寸不变
File fromPic =new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive__88.jpeg"); File toPic =new File("C:\\Users\\Administrator\\Desktop\\IdCardPositive__08.jpeg"); Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);
outputQuality就是用来控制图片质量的
给图片加水印
Thumbnails.of(fromPic).scale(0.8) .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(waterPic), 0.5f) .outputQuality(0.8f).toFile(toPic); //watermark(位置,水印图,透明度) Thumbnails.of("images/a380_1280x1024.jpg") .size(1280, 1024) .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(new File("images/watermark.png")), 0.5f) .outputQuality(0.8f) .toFile("c:/a380_watermark_bottom_right.jpg"); Thumbnails.of("images/a380_1280x1024.jpg") .size(1280, 1024) .watermark(Positions.CENTER, ImageIO.read(new File("images/watermark.png")), 0.5f) .outputQuality(0.8f) .toFile("c:/a380_watermark_center.jpg");
fromPic是原图,waterPic是水印图片,toPic是生成后的图片

旋转图片
Thumbnails.of(fromPic).scale(0.5).rotate(90).toFile(toPic);
图片裁剪
Thumbnails.of(fromPic).sourceRegion(Positions.CENTER, 300, 300).scale(1.0).toFile(toPic); //sourceRegion() //图片中心400*400的区域 Thumbnails.of("images/a380_1280x1024.jpg") .sourceRegion(Positions.CENTER, 400,400) .size(200, 200) .keepAspectRatio(false) .toFile("c:/a380_region_center.jpg"); //图片右下400*400的区域 Thumbnails.of("images/a380_1280x1024.jpg") .sourceRegion(Positions.BOTTOM_RIGHT, 400,400) .size(200, 200) .keepAspectRatio(false) .toFile("c:/a380_region_bootom_right.jpg"); //指定坐标 Thumbnails.of("images/a380_1280x1024.jpg") .sourceRegion(600, 500, 400, 400) .size(200, 200) .keepAspectRatio(false) .toFile("c:/a380_region_coord.jpg");
WEB输出流图片
某些应用上传的图片可能质量比较高,但是用户在列表浏览的时候,又不想原图展示,因为带宽要求较高,此时可以降低图片质量(上面提到的outputQuality),以outputstream输出流的方式response给浏览器去展示

以上是代码,只要将输出输出流到response就行了,非常简单

缩小0.5,质量0.1,输出图片大小只有6.2KB了,大大加快了web浏览图片的速度

原图大小757KB
图像的格式转换
//outputFormat(图像格式) Thumbnails.of("images/a380_1280x1024.jpg") .size(1280, 1024) .outputFormat("png") .toFile("c:/a380_1280x1024.png"); Thumbnails.of("images/a380_1280x1024.jpg") .size(1280, 1024) .outputFormat("gif") .toFile("c:/a380_1280x1024.gif");
输出到BufferedImage
//asBufferedImage() 返回BufferedImage BufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg") .size(1280, 1024) .asBufferedImage(); ImageIO.write(thumbnail, "jpg", new File("c:/a380_1280x1024_BufferedImage.jpg"));
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216541.html原文链接:https://javaforall.net
