系统极客一直在努力
专注操作系统及软件使用技能

如何使用 Google 开源 Jpegli 编码库无损压缩图片,节省网站流量

Jpegli

在互联网时代,网页加载速度直接影响着用户体验,而图片往往是导致网页加载缓慢的主要原因之一。对于站长和网站运营者来说,流量和带宽就是「小钱钱」💰🫰,当然是能节约一个算一个。

为此,Google 推出了 Jpegli,一个革新性的 JPEG 编码库。它不仅完全兼容现有 JPEG 标准,还能在保证图像质量的同时,将图片大小减少约 35%。简单来说,就是图片无损压缩。

Jpegli 的核心优势

  • 完全兼容:与传统 JPEG 标准完全兼容,支持主流的 8 位格式,并且可以无缝对接 libjpeg-turbo 和 MozJPEG 的 API/ABI。
  • 更高画质:采用先进的心理视觉计算模型,生成的图像更清晰,噪点和失真更少。
  • 高效编码:虽然压缩率更高,但编码速度与 libjpeg-turbo 和 MozJPEG 等主流方案相当。开发者可以轻松将其整合到现有工作流程中,而无需担心性能问题。
  • 支持高位深:突破传统 JPEG 8 位的限制,支持 10+ 位编码。这意味着,可以避免渐变区域出现明显的色带。虽然使用了更高位深,但输出的图像仍然兼容所有 8 位图像查看器。
  • 更强压缩:相比传统 JPEG 编码器,在相同画质下可以实现更小的文件体积,这不仅节省了存储空间和带宽,还能显著提升网页加载速度。

Jpegli 是对 JPEG 编码技术的优化升级,而不是新的文件格式。它生成的图片可以在任何支持 JPEG 的设备或软件上正常查看。

在高质量压缩设置下,Jpegli 可以比传统 JPEG 编码器节省高达 35% 的文件体积。

在 Linux 中编译和使用 Jpegli

好处说了一大堆,下面我们就用一些从 Bing 网站 Kiang 来的图片作为示例,为大家介绍如何在 Ubuntu 上编译和使用 Jpegli 来压缩图片。

1安装编译工具链:

sudo apt install build-essential g++ cmake ninja-build \
  clang clang-format clang-tidy curl parallel gcovr \
  pkg-config git doxygen asciidoc graphviz qt6-base-dev libgimp2.0-dev \
  libjpeg-dev libpng-dev libwebp-dev libavif-dev libgif-dev \
  libgoogle-perftools-dev libgtest-dev libbenchmark-dev libbenchmark-tools

2将 Google 的 Jpegli 项目克隆到本地:

git clone https://github.com/google/jpegli.git
cd jpegli

3使用deps.sh脚本拉取相关依赖:

./deps.sh
执行 deps.sh 脚本拉取 Jpegli 所需依赖项
执行 deps.sh 脚本拉取 Jpegli 所需依赖项

4构建 Jpegli 软件并进行单元测试:

./ci.sh release

5编译完成后,会在build/tools目录下生成cjpeglidjpegli二进制文件:

cd build/tools
ls -l cjpegli djpegli

其中cjpegli用于压缩,djpegli用于解码。

查看编译好的 cjpegli 和 djpegli 可执行文件
查看编译好的 cjpegli 和 djpegli 可执行文件

使用示例脚本

例如,要使用cjpegli来压缩/demo/img/目录中所有.jpg.jpeg扩展名的图片,可以使用以下脚本:

#!/bin/bash
# name:convert_images_to_jpegli.sh

# 源目录和目标目录
src_dir="/demo/img/"
dest_dir="/demo/img_output/"
# 遍历所有的.jpg和.jpeg文件
find "$src_dir" -type f \( -name "*.jpg" -o -name "*.jpeg" \) | while read src_path; do
  # 计算目标路径,保持原始扩展名
  dest_path="${src_path/#$src_dir/$dest_dir}"
  dest_path_dir=$(dirname "$dest_path")
  # 如果目标目录不存在,则创建
  if [ ! -d "$dest_path_dir" ]; then
    mkdir -p "$dest_path_dir"
  fi
  # 使用cjpegli转换图片(路径用你实际的)
  /usr/local/src/jpegli/build/tools/cjpegli "$src_path" "$dest_path"
done
使用脚本批量执行 jpegli 图片压缩
使用脚本批量执行 jpegli 图片压缩
压缩前后大小对比,效果喜人
压缩前后大小对比,效果喜人

对比了下处理之后的大小,效果还是满不错的。


通过以上步骤,你可以在 Linux 系统中轻松编译和使用 Jpegli 进行图片无损压缩,从而节省网站流量和带宽,提升用户体验。

赞(4) 赞赏

评论 抢沙发

微信赞赏