Java使用Thumbnails进行图片处理
一、前言
在做网站的时候经常会遇到图片加载的比较慢的问题,希望能够快一些。大多数情况下,我们在上传图片的时候是将原图片上传上去了,也就是图片实际多大就会显示多大。
很多情况中,网站的图片是非常大的,有的时候回超过10M甚至更大,那么网页在加载的时候当然会比较慢。
那么有没有什么方法既可以保证我们的图片清晰度又可以让我们的图片小一些呢?当然有,Thumbnails提供了图片的缩放、旋转、水印以及裁剪的功能。
参考链接
名称 | 地址 |
---|---|
官方地址 | http://code.google.com/p/thumbnailator/ |
二、API介绍
API | 说明 |
---|---|
Thumbnails.of(src).scale(0.2f).toFile(desc) | 按比例缩小 |
Thumbnails.of(src).scale(2f).toFile(desc) | 按比例放大 |
Thumbnails.of(src).size(100,100).keepAspectRatio(false).toFile(desc) Thumbnails.of(src).forceSize(100,100).toFile(desc) | 不按比例,就按指定的大小进行缩放 |
Thumbnails.of(src).scale(1f).outputQuality(0.25f).toFile(desc) | 图片尺寸不变,压缩图片文件大小 outputQuality(图像质量) 1为最高质量 |
Thumbnails.of(src).size(400,400).watermark(Positions.CENTER,ImageIO.read(waterPic),0.5f) .outputQuality(0.8f).toFile(desc) | 给图片加水印,watermark(位置,水印图,透明度) Positions.CENTER 表示加在中间 |
Thumbnails.of(src).scale(1f).outputFormat("png") .toFile(desc) | 转换图片格式,用 outputFormat(图像格式) 转换图片格式,保持原尺寸不变 |
Thumbnails.of(src).size(120,120).toOutputStream(os) | 输出成文件流OutputStream |
Thumbnails.of(src).size(120,120).asBufferedImage() | 输出成BufferedImage asBufferedImage() 返回BufferedImage BufferedImage |
三、操作流程
1.引入依赖
<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version> </dependency> |
2.代码演示
图片功能裁剪
//保持图片不变形,多余部分裁剪掉 //压缩至指定图片尺寸(例如:横400高300) BufferedImage image = ImageIO.read(fromPic); Builder builder = null; int imageWidth = image.getWidth(); int imageHeitht = image.getHeight(); if ((float)300 / 400 != (float)imageWidth / imageHeitht) { if (imageWidth > imageHeitht) { image = Thumbnails.of(fromPic).height(300).asBufferedImage(); } else { image = Thumbnails.of(fromPic).width(400).asBufferedImage(); } builder = Thumbnails.of(image).sourceRegion(Positions.CENTER, 400, 300).size(400, 300); } else { builder = Thumbnails.of(image).size(400, 300); } builder.outputFormat("jpg").toFile(toPic); //注意:scale、width|height、size三者不能同时共存,但必须要有一个 |
web端传输
//asBufferedImage() 返回BufferedImage BufferedImage thumbnail = Thumbnails.of("images/a380_1280x1024.jpg") .size(1280, 1024) .toOutputStream(response.getOutputStream()); |