Jpegli 简介:Google 开源的新一代 JPEG 编码库

互联网改变了我们的生活、工作和交流方式。然而,当页面加载缓慢时,它可能会变成令人沮丧的根源。这个问题的核心在于图像的编码。

为了改进这一点,Google 推出了 Jpegli,这是一种先进的 JPEG 编码库,它保持了高度的向后兼容性,同时提供增强的功能,并在高质量压缩设置下将压缩比提高了 35%。

Jpegli 是一个新的 JPEG 编码库,其设计比传统 JPEG 更快、更高效、更美观。它使用了许多新技术来实现这些目标,包括:

  • 它提供了完全可互操作的编码器和解码器,符合原始 JPEG 标准及其最传统的 8 位形式,以及与 libjpeg-turbo 和 MozJPEG 的 API/ABI 兼容性。
  • 高质量:当通过 Jpegli 压缩或解压缩图像时,会执行更精确且心理视觉上有效的计算,并且图像将看起来更清晰并且可观察到的伪影更少。
  • 速度快:在提高图像质量/压缩密度比的同时,Jpegli 的编码速度与 libjpeg-turbo 和 MozJPEG 等传统方法相当。这意味着 Web 开发人员可以轻松地将 Jpegli 集成到他们现有的工作流程中,而无需牺牲编码速度性能或内存使用。
  • 10+ 位:Jpegli 每个组件可以使用 10+ 位进行编码。传统的 JPEG 编码解决方案仅提供每个组件 8 位动态,导致缓慢梯度中出现可见的条带伪影。Jpegli 的 10+ 位编码以原始 8 位形式进行,生成的图像可与 8 位查看器完全互操作。10+ 位动态可作为 API 扩展使用,需要更改应用程序代码才能从中受益。
  • 更密集:Jpegli 比传统 JPEG 编解码器更有效地压缩图像,可以节省带宽和存储空间,并加快网页速度。

Jpegli 工作原理

Jpegli 的工作原理是使用许多新技术来降低噪声并提高图像质量;主要是来自 JPEG XL 参考实现的自适应量化启发式、改进的量化矩阵选择、精确计算中间结果,并有可能使用更高级的色彩空间。所有新方法都经过精心设计,以使用传统的 8 位 JPEG 形式,因此新压缩的图像与现有的 JPEG 查看器(例如浏览器、图像处理软件等)兼容。

自适应量化启发法

Jpegli 使用自适应量化来降低噪声并提高图像质量。这是通过基于心理视觉建模对量化死区进行空间调制来完成的。使用我们最初为 JPEG XL 开发的自适应量化启发式方法,可以提高图像质量并减小文件大小。这些启发式方法比 guetzli 中最初使用的类似方法要快得多。

改进的量化矩阵选择

Jpegli 还使用一组量化矩阵,这些矩阵是通过优化心理视觉质量指标的组合而选择的。 Jpegli 中的精确中间结果可提高图像质量,并且编码和解码都会产生更高质量的结果。 Jpegli 可以使用 JPEG XL 的 XYB 色彩空间来进一步提高质量和密度。

测试 Jpegli

为了量化 Jpegli 的图像质量改进,我们在众包评估者的帮助下比较了 Cloudinary 图像数据集 '22 中的图像对,这些图像使用三种编解码器进行编码:Jpegli、libjpeg-turbo 和 MozJPEG,并以多种比特率进行编码。

在此测试中,我们仅限于比较编码,解码始终使用 libjpeg-turbo 执行。我们在禁用 XYB ICC 颜色配置文件的情况下进行了研究,因为我们预计大多数用户最初会使用 Jpegli。为了简化跨编解码器和设置的结果比较,我们使用国际象棋排名启发 ELO 评分来汇总所有评估者决策。

ELO 分数越高,表明评估者研究中的总体表现越好。我们可以观察到,2.8 BPP 的 jpegli 获得的 ELO 评级高于 3.7 BPP 的 libjpeg-turbo,比特率比 Jpegli 高 32%。

测试结果表明,Jpegli 可以比传统 JPEG 编解码器多压缩 35% 的高质量图像。

相关推荐
明月清风徐徐26 分钟前
Vue实训---2-路由搭建
前端·javascript·vue.js
王解35 分钟前
速度革命:esbuild如何改变前端构建游戏 (1)
前端·vite·esbuild
葡萄城技术团队42 分钟前
使用 前端技术 创建 QR 码生成器 API1
前端
DN金猿44 分钟前
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)(很详细)
前端·vue.js·pdf
鸽鸽程序猿1 小时前
【前端】javaScript
开发语言·前端·javascript
秦时明月之君临天下1 小时前
React和Next.js的相关内容
前端·javascript·react.js
上官花雨2 小时前
什么是axios?怎么使用axios封装Ajax?
前端·ajax·okhttp
米奇妙妙wuu2 小时前
React中 setState 是同步的还是异步的?调和阶段 setState 干了什么?
前端·javascript·react.js
李刚大人2 小时前
react-amap海量点优化
前端·react.js·前端框架
闹闹没有闹2 小时前
socket连接封装
前端