日常浏览器中最常使用的图片格式依旧是 JPG 或者 PNG ,因此如何压缩图片大小是一个很重要的优化方向。
介绍
Guetzli 是一种 JPEG 编码器,旨在以高视觉质量实现出色的压缩密度。 Guetzli 生成的图像通常比 libjpeg
(JPEG 官方的编码器) 生成的同等质量的图像小 20-30%。 Guetzli 仅生成顺序(非渐进式)JPEG,因为它们提供更快的解压缩速度。
构建
在 POSIX 系统(比如 Linux 上)
- 克隆代码,或者从 GitHub 归档地址中下载然后解包;
- 安装 libpng。如果使用发行版的包管理器,请安装 development 版本,一般是
devel
或者dev
包名后缀; - 执行
make
命令进行编译,然后可执行文件会出现在bin/Release/guetzli
目录下。
使用 Bazel 编译
也可以使用 Bazel 提供的构建配置,如果已经安装了 Bazel ,你可以使用命令 bazel build -c opt //:guetzli
编译 Guetzli 。
使用
注意:Guetzli 会使用大量内存,每编码 1MPix 的图像需要为其提供约 300MB 的内存。同时会占用大量的 CPU 时间,每编码 1MPix 的图像约占用 1 分钟的 CPU 时间。Guetzli 默认输入的 sRGB 的伽马值 2.2,Guetzli 会默认忽略图片的颜色配置 metadata。
开始尝试使用 Guetzli ,需要手动从源码构建,或直接下载编译完成的二进制包,可执行文件可以读取 JPEG 或 PNG 格式的图片,并创建一个优化后的 JPEG 图像。
guetzli [--quality Q] [--verbose] original.png output.jpg
guetzli [--quality Q] [--verbose] original.jpg output.jpg
需要注意的是,Guetzli 是一个旨在处理高质量图像的程序,因此使用未被压缩的图像作为输入会有更好效果,虽然被压缩过的图像也能进行处理,但是效果会更差。可以使用谷歌提供的示例图像进行压缩。
执行命令时可以使用 --quality Q
参数来获取和 libjpeg 同等效力的图像质量,还可以使用 --verbose
参数来查看详细日志。
需要注意的是,JPEG 图像不支持 Alpha 通道(也就是 PNG 的透明度),如果输入的是自带 Alpha 通道的 PNG 图像,那么会把图像构建在黑色背景上。
如果在构建时提示以下报错,那么需要安装依赖 pkg-config
。
/bin/sh: 1: pkg-config: not found
补充依赖
sudo apt install pkg-config
构建出来的可执行文件会比较大,可以使用 strip 命令对齐进行精简,然后可以移动到系统 PATH 下方便操作。
cd bin/Release/
strip guetzli
sudo cp guetzli /usr/local/bin/
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2022-04-30 03:11 AM