背景
对于javaweb服务端开发人员,图片资源的管理总是绕不开的一环。很多网站上都会提供上传图片这个功能,而现代数码设备拍摄出来的都是高清图片,分辨率很高,占用的空间也很大。物理存储的问题还算容易解决,但是网络带宽太紧张了。一个页面动则就几十M,那加载速度就会很慢,所以图片的压缩就必不可少了。
图片压缩要求
- 压缩程度可控。
- 压缩之后图片尽可能的不失真。
- 压缩速度要快。
- 代码简单,依赖较少。
技术选型
目前处理图片主流的有两种,第一种依赖环境需要安装imageMagick和GraphicsMagick,第二种是使用Thumbnailator类库,相对来说Thumbnailator在处理图片的时候还原度没有第一种的好,不过胜在实现简单,且能满足绝大多数的情况。
Thumbnailator简介
对于图片处理,JDK中也提供了对应的工具类,不过处理起来会很麻烦,而Thumbnailator是一个Google开源的优秀图片处理的第三方Java类库,处理效果远比Java API的好。
Thumbnailator可以使用很少的代码实现图片的压缩功能,当然了,Thumbnailator也提供给图片缩放、旋转与加水印等功能。
使用方式
github地址
https://github.com/coobird/thumbnailator
maven的地址
maven引入jar文件
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
示例
示例1:
在目录中创建图像文件的JPEG缩略图,将它们全部调整为最大尺寸为640像素乘480像素,同时保留原始图像的长宽比。
public static void main(String[] args) throws IOException {
String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator";
Thumbnails.of(new File(filePath).listFiles())
.size(640, 480)
.outputFormat("jpg")
.toFiles(Rename.PREFIX_DOT_THUMBNAIL);
}
Thumbnailator提供的流畅接口简化了将缩略图制作为单个方法调用的任务!
无需访问Image I / O API并BufferedImage通过Graphics2D对象手动操作。Thumbnailator为您完成所有这些工作。
效果
示例二:
从图像文件创建缩略图:将Img1.jpg调整图片的大小,然后保存到Img1_thumbnail.jpg。
public static void main(String[] args) throws IOException {
String filePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1.jpg";
String newFilePath = "C:\\Users\\shunli\\Desktop\\Thumbnailator\\Img1_thumbnail.jpg";
Thumbnails.of(new File(filePath))
.size(640, 480)
.