guetzli github仓库
介绍
Guetzli 是一种 JPEG 编码器,旨在以高视觉质量实现出色的压缩密度。Guetzli 生成的图像通常比 libjpeg 生成的同等质量的图像小 20-30%。Guetzli 仅生成顺序(非渐进式)JPEG,因为它们提供更快的解压缩速度。
安装与使用
按照文档去安装蛮简单的,就不过多介绍了。我这边是基于 docker 去实现的,生成的镜像文件已推送到远程,可使用docker pull keyson/guetzli:latest
得到镜像。
生成容器:
docker run -itd --name guetzli-test -v D:\docker_com\guetzli-docker\sync\images:/data/sync --privileged=true keyson/guetzli
进入容器:
docker exec -it -u root guetzli-test /bin/bash
运行命令guetzli
,可以看到以下说明:
root@74d386b6d354:/data/sync# guetzli # 由于镜像里做了软链,任意地方调用guetzli都可
Guetzli JPEG compressor. Usage:
guetzli [flags] input_filename output_filename
Flags:
--verbose - Print a verbose trace of all attempts to standard output.
--quality Q - Visual quality to aim for, expressed as a JPEG quality value.
Default value is 95.
--memlimit M - Memory limit in MB. Guetzli will fail if unable to stay under
the limit. Default limit is 6000 MB.
--nomemlimit - Do not limit memory usage.
其参数不多,也很容易理解。参数说明:
- –verbose:打印对标准输出的所有尝试的详细跟踪。
- –quality Q :目标视觉质量,以 JPEG 质量值表示。默认值为 95。
- –memlimit M:以 MB 为单位的内存限制。如果不能保持在限制以下,Guetzli 将失败。默认限制为 6000 MB。
- –nomemlimit:不限制内存使用。
简单的示例
我这边是使用一张原图大小为 1592KB 的图片。 在默认参数下使用 Guetzli对其进行4次压缩看看结果。
第一次
guetzli th15.jpg output.jpg
第二次
guetzli output.jpg output2.jpg
第三次
guetzli output2.jpg output3.jpg
第四次
guetzli output3.jpg output4.jpg
可以看到运行时容器的状态,确实是蛮吃内存:
可以看到结果:
图片原大小为1592KB的(在我本机)经过四次压缩后,变成了653 KB,重要的是很难看到图片质量是否降低。这个真得厉害。
结论:可以使用guetzli对图片进行多次压缩。当然如果想一次搞定的话,可以改变参数来降低质量。
注意事项
- Guetzli 使用大量内存。按官方文档来说,应该为 1Mpix 提供 300MB 的内存。
- Guetzli 使用了大量的 CPU 时间。每 1MPix 输入图像使用大约1分钟的 CPU。