Java 使用 google 开源工具实现图片压缩

前言

作为靠谱的 java 服务端程序员,图片这个事情一直是个头疼的事情。

现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高清图片,分辨率也是相当的高,当然占用的存储空间也就大了。问题也就产生了,你每个用户都上传个 3M 的图片怎么办?

但是显然现在硬盘的存放空间是不值钱的,1T、2T 随便来,存放是能用钱解决的问题。

但是网速太值钱了,用户如果天天加载你的网页加载个半天,就是因为图片太大导致的那就不是钱能解决的问题了。

因为用户的网络环境你是不可控制的。所以你只能考虑压缩图片的质量从而保证网站打开的速度。

压缩的要求

图片压缩,在我的想法里面有下面几个要求。

  • 压缩程度可控制,想压缩成多小就多小。
  • 压缩之后图片尽可能的不失真。
  • 压缩速度要快。
  • 代码简单,依赖较少。

实现

然后带着这些要求去寻找,找到了 Thumbnailator,一个 google 使用的开源的工具类。

这个工具类满足了上面所说的所有的要求。

同时对于图片的处理还有了别的方法,如旋转,裁切,加水印等等。

在 github 上面的地址是:https://github.com/coobird/thumbnailator

maven 的地址



<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>

使用起来特别的简单:一行代码就搞定了

Thumbnails.of("原图文件的路径") .scale(1f) .outputQuality(0.5f) .toFile("压缩后文件的路径");

其中的 scale 是可以指定图片的大小,值在 0 到 1 之间,1f 就是原图大小,0.5 就是原图的一半大小,这里的大小是指图片的长宽。

而 outputQuality 是图片的质量,值也是在 0 到 1,越接近于 1 质量越好,越接近于 0 质量越差。

对于压缩图片来说上面就已经足够了。

优点

  • 简单容易使用。
  • 压缩图片效果很好。如下:其中 100 是原图,50 就是 0.5f。
  • 图片质量不错下面是 0.25f 和原图的对比。

上面是压缩过后的,下面是原图、看出来了吗?

其他功能

最后附上其他功能使用的简单例子
98f64168e0a6424eb045ddef9dae87a7.png
e43fef725f3f480b8e820359173c4215.png
33cf539557a54ad2bbec512b0551e026.png
2bd55f61dabd48bbb671dcc3f8f50bf3.png
e365692e350e4ad0bea2c1844e11c671.png

其他的具体方法细节可以自己去查看官方的 API 或者网络上的其他资源。