1. 背景
个人站性能优化提高首开率,同时要求文章能快速打开,因为一篇文章可能使用很多图片,因此图片压缩必不可少。
2. 初步筛选
谷歌搜索"图片压缩",不少推荐这个软件:
但是正式版价格太贵,39欧元的年费,折合人名币大约307元/年。
于是想到X宝,有专门搞软件破解的,价格实惠,不过这次比想象中的贵:
一般商业软件20块左右基本能拿下,这个虽然比tinify便宜,但算下来也要100出头,而且是年费。
接着找开源,找到了:github.com/coobird/thu...
官网介绍主要是做缩略图,水印,但也能压缩图片,先试试吧。
3. 选型之路
3.1 试用thumbnailator
3.1.1 代码
引入maven依赖,本次尽量使用高版本,以解决已知bug:
java
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.20</version>
</dependency>
网上拷贝代码改改:
java
public class CompressionUtil {
public static void compress(String sourceFilePath, String outputFilePath) throws IOException {
BufferedImage sourceImage = ImageIO.read(new FileInputStream(sourceFilePath));
Thumbnails.of(sourceImage).size(sourceImage.getWidth(), sourceImage.getHeight()).keepAspectRatio(false)
.outputFormat(getExtensionName(sourceFilePath)).toFile(outputFilePath);
}
private static String getExtensionName(String filePath) {
int length = filePath.length();
return filePath.substring(length - 3, length);
}
}
3.1.2 压缩结果对比
可以看到,不少图片压缩比接近50%,还有一部分压缩比较低,但还有越压越大的,虽然在网上也看到过文件会越压越大,本指望最新版本能解决,看到这个结果还是有点惊讶。
文件越压越大的分析:www.51cto.com/article/753...
我相信尝试各种方法做优化,调整参数,结果可能会好些,不过没有官方指导,要适配各种场景都能得到一个较好的结果,难度可能有点大,而且大概率也会很耗时,暂时挂起,看看其他软件的表现。
3.2 试用X宝tinypng
此X宝商家贴了tinify的熊猫吃竹子图片做宣传,特意问了是不是tinify正版,回复集成了tinify,就先当是正版吧。
试用版有一天使用期,工具使用比较简单,可以指定压缩文件目录,拖动图片目录到指定区域则可:
压缩结果对比:
看起来压缩比更高,很多远超50%,也没有出现越压越大的现象,再比较下和开源工具thumbnailator的压缩结果:
多数图片的压缩比都高于开源工具thumbnailator,只有一个低于它。
目前大致觉得该软件还是有点靠谱,此时想起来如果图片加水印后会有啥影响:
从结果看,加水印居然还能自动压缩,保险起见,先加水印,再用X宝工具压缩:
可见虽然加水印起到了压缩作用,工具还能进一步压缩。
本来X宝工具基本可以作为备选,不过在这次压水印图片过程中,最后两张图片等了很长时间没有结果,以致我以为出错了,因为操作界面就提到有失败率。
不希望今后要去挑失败的图片重压,所以我又试了tinify。
3.3 试用tinify
年费307.52,对于当下月入2280.22的我来说着实是一笔庞大开销,不过要实现个人站性能优化目标,图片压缩绕不过去,X宝工具那个长时间停顿有点不放心(虽然等我买完tinify,写此文时最后两张图片也出结果了)。
收费的pro版界面:
压缩后的文件和X宝工具对比:
可以看到压缩比进一步提升。
3.4 效果对比
找两组图片比较一下。
3.4.1 第一组
组件局部注册后.png
压缩工具 | 大小 |
---|---|
源图 | 78.4 KB |
tinify | 23.3 KB |
X宝工具 | 54.7 KB |
thumbnailator | 65.3 KB |
● 源图
● tinify
● X宝工具
● thumbnailator
3.4.2 第二组
全局注册时延.png
压缩工具 | 大小 |
---|---|
源图 | 61.6 KB |
tinify | 16.7 KB |
X宝工具 | 40.3 KB |
thumbnailator | 31.7 KB |
● 源图
● tinify
● X宝工具
● thumbnailator
4. 总结
● thumbnailator
本次试用后排除,其存在的压缩后文件变大问题,未必一定不能优化,只是不想耗费过多精力在上面,主要是官方并没有看到明确指导,而且默认压缩比也不是最优。
● X宝工具
实际还可以继续深度评估,毕竟比tinify便宜接近2/3,虽然本次验证压缩比没有tinify高,压缩质量也不突出,但界面上还有不少参数可调整,未必就不能有好结果。(试用版不能选择参数,不知道是否隔日导致,未超过24小时)
如果第2次压缩过程中间没有长时间等待导致误以为出错,很有可能就选它了,这也说明产品设计很重要,要让客户明确知道程序在正常运行。
● tinify
尚没有频繁操作,目前的体验还可以,有限操作过程中没有发现明显问题,默认压缩比也高,压缩图片清晰度可接受,且年费已付,先用起来吧。
注:本文不构成最终选型建议,不同的应用场景如自媒体,对图片质量的要求也不同,即使同是个人站,要求也可能不同。
其他阅读:
如何编写软件设计文档
Spring Cache架构、机制及使用
布隆过滤器适配Spring Cache及问题与解决策略
JAVA编程思想(一)通过依赖注入增加扩展性
JAVA编程思想(二)如何面向接口编程
JAVA编程思想(三)去掉别扭的if,自注册策略模式优雅满足开闭原则
Java编程思想(七)使用组合和继承的场景
JAVA基础(一)简单、透彻理解内部类和静态内部类
JAVA基础(二)内存优化-使用Java引用做缓存
JAVA基础(三)ClassLoader实现热加载
JAVA基础(五)函数式接口-复用,解耦之利刃