使用 Guetzli 压缩 JPG 图片尺寸

后知后觉 暂无评论

日常浏览器中最常使用的图片格式依旧是 JPG 或者 PNG ,因此如何压缩图片大小是一个很重要的优化方向。

介绍

Guetzli 是一种 JPEG 编码器,旨在以高视觉质量实现出色的压缩密度。 Guetzli 生成的图像通常比 libjpeg(JPEG 官方的编码器) 生成的同等质量的图像小 20-30%。 Guetzli 仅生成顺序(非渐进式)JPEG,因为它们提供更快的解压缩速度。

构建

在 POSIX 系统(比如 Linux 上)

  1. 克隆代码,或者从 GitHub 归档地址中下载然后解包;
  2. 安装 libpng。如果使用发行版的包管理器,请安装 development 版本,一般是 devel 或者 dev 包名后缀;
  3. 执行 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/

附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。