java使用mozjpeg高效无损压缩jpeg

这些年来,网站的图片使用数量和大小都在与日俱增,而HTML、JS和CSS文件大小都相对减小了。也就是说在页面加载的过程中,图片占用了大量的网络流量。所以减小图片的大小可以显著优化页面加载速度。

jpeg/jpg 图片在网站使用中比较常见,可以使用java自带的 java.awt.Image 处理,或者用第三方图片jar(如google的开源工具thumbnailator),今天介绍一个jpeg的处理库MozJPEG

说起MozJPEG,首先了解一下jpeg的发展历史:

(1)libjpeg:开发时间最早,使用最广泛的 JPEG 库。由于 JPEG 标准过于复杂和模糊,并没有其他人去实现,所以这个库是 JPEG 的事实标准;
(2)libjpeg-turbo:一个致力于提升编解码速度的 JPEG 库。它基于 libjpeg 进行了改造,用 SIMD 指令集 (MMX、SSE2、NEON) 重写了部分代码,官网称相对于 libjpeg 有 2 到 4 倍的性能提升;
(3)MozJPEG: 一个致力于提升压缩比的 JPEG 库。它是 Mozilla 在 2014 年发布的基于 libjpeg-turbo 进行改造的库,相对于 libjpeg 有 5% ~ 15% 的压缩比提升,但相应的其编码速度也慢了很多。

虽然说他的速度慢了一些,但比guetzli快了很多,个人觉得更适合web的图片处理。

话不多言,先对比一下压缩前后的图片。如下图。

281 K
压缩前,281 K

 

压缩后,75k
压缩后,75k

怎么样,很惊讶吧!色彩和亮度跟原图差不多,也不模糊,感觉称得上无损压缩了,上图是使用了80的压缩质量。压缩质量值可以自己控制。当然了,压缩率设置越低的话,图片也会越模糊。

官方的代码中,有java的测试代码,https://github.com/mozilla/mozjpeg/tree/master/java

java调用mozjpeg,主要是用 JNI

来跑一下官方例子:

1. 安装libjpeg-turbo

我是在 mac 笔记本运行的,先安装libjpeg-turbo,可以使用brew。

2. 指定库文件路径

比如我的安装目录在/opt/libjpeg-turbo,运行TJExample.java文件时,加上vm参数,指定库文件路径,如下

也可以在代码上指定库文件路径,不同的操作系统,库文件格式不一样:mac是dylib格式,windows是dll格式,linux是so格式。

 

最后,运行结果如下

 

以下网站的jpeg图片,就是用了mozjpeg压缩的,可以前往测试效果

demo网站

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注