3

Google 开源 Jpegli 编译和使用,将 JPEG 图像压缩率提升 35%

 4 weeks ago
source link: https://www.sysgeek.cn/google-jpegli/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Google 开源 Jpegli 编译和使用,将 JPEG 图像压缩率提升 35%

发布日期:2024-04-07 分类:技术 阅读(961) 评论(0)
google-2.jpg

Google 最近发布了一款 Jpegli 开源编码库,旨在提高 JPEG 图像的压缩效率。它能够将 JPEG 图像的压缩比率提升至传统方法的 35%,有效加快网页的加载速度。

Jpegli 完全兼容 8-bit JPEG 标准,编码后的图像能在任何常见浏览器、图片编辑器或查看器中打开。它只是对 JPEG 编码技术的改进,并不是一种全新的文件格式。

使用 Jpegli 技术,可以实现更高比率的图像压缩,同时尽可能减少质量损失。这将带来更快的网页加载速度、提升网站图形质量,并降低网络运营成本。此外,Jpegli 还可能会减少对 WebP 图像格式的依赖,尽管 WebP 目前尚未广泛普及。

google-jpegli-p2.jpeg
jpegli 在 2.8 BPP 时获得了比 libjpeg-turbo 在 3.7 BPP 时更高的 ELO 评级,而 libjpeg-turbo 的比特率比 jpegli 高出 32%

Jpegli 编码技术的压缩比率提升达到了 35%,相较于 MozJPEG 等其他编码器,这无疑是一个巨大的飞跃。MozJPEG 相比传统 JPEG 压缩比率仅提升了 20%。

Jpegli 的核心技术来自于改进的 JPEG XL 自适应量化启发式算法。虽然 JPEG XL 作为一种新一代文件格式,曾在 Chrome 浏览器中进行过短期测试,但因维护问题而终止。

此外,Jpegli 还引入了一系列新技术,包括一套优化的量化矩阵集,能够在压缩过程中保持图像质量。即便在 10+ bits 编码下,Jpegli 仍能保持与 8-bit 的兼容性。

如果应用程序或浏览器支持 Jpegli 解码,就能显示 10+ bits 的图像;如果使用其他解码方法,图像将以 8-bit 显示。

Jpegli 作为一个开源项目,任何人都可以在 Github 上免费获取它来编码和解码图像。它带来的高压缩比有望显著降低 Google Photos 等服务的运营成本,同时不影响图像质量和用户体验,预计 Google 旗下的服务会率先采用。

在 Linux 中编译和使用 Jpegli

以 Ubuntu 作为示例。

1安装编译工具链:

复制复制复制复制复制复制复制
复制
sudo apt install build-essential git ninja-build cmake clang doxygen graphviz pkg-config libjpeg-dev libpng-dev libwebp-dev libavif-dev

2将 JPEG XL 项目克隆到本地:

复制复制复制复制复制复制
复制
git clone https://github.com/libjxl/libjxl.git
cd libjxl

3执行deps.sh脚本安装相关依赖:

复制复制复制复制复制
复制
./deps.sh
执行 deps.sh 脚本安装 libjxl 相关依赖项
执行 deps.sh 脚本安装 libjxl 相关依赖项

4构建 JPEG XL 软件并运行单元测试:

复制复制复制复制
复制
./ci.sh release

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

复制复制复制
复制
cd build/tools
ls -l cjpegli djpegli

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

查看编译好的可执行文件
查看编译好的可执行文件

例如有一个/demo/img/目录中的所有.jpg图片要使用cjpegli进行压缩,可以使用以下脚本:

复制复制
复制
#!/bin/bash
# 源目录和目标目录
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/libjxl/build/tools/cjpegli "$src_path" "$dest_path"
done
执行 jpegli 批量压缩
执行 jpegli 批量压缩
Ubuntu
压缩前后大小对比,效果感人

对比了下处理之后的大小,效果还是很好的。

本站图片已经全部采用 jpegli 重新压缩完毕(原 MozJPEG),整体大小从原来的 1.02GB 变成了 633.9MB,缩小了快 40%。大约每天能省2GB 左右的 CDN 流量 ,妥妥的都是钱啊。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK