libjpeg-turbo 最初基于 libjpeg/SIMD ,它是 libjpeg v6b 的 MMX 加速衍生物
在Linux中,当谈到编解码器时,大多数用户通常不会担心它,因为在许多发行版中,这个问题通常已经通过默认包含在目标中来解决,除了查看或编辑应用程序之外,他们还贡献了自己的颗粒沙子,包括一些额外的东西。
但是,当用户想要提高某些方面的性能(例如编辑任务或简单的休闲)时会发生什么。 在这一部分中,并非所有用户都会参与,但对于那些感兴趣的用户,他们倾向于研究每种格式提供的优点和缺点。
这就是我们今天要讨论的编解码器的用武之地,即 JPEG 图像格式是最流行的图像格式之一,但这并不意味着它是最好的,因为还有其他格式比这提供了许多优势。
libjpeg-turbo 旨在解决 JPEG 相对于其他格式的一些不足之处,正如其 GitHub 存储库中所述:
libjpeg-turbo 是一种 JPEG 图像编解码器,它使用 SIMD 指令来加速 x86、x86-64、Arm、PowerPC 和 MIPS 系统上的基准 JPEG 压缩和解压缩,以及 x86、x86-64 和 arm 上的渐进式 JPEG 压缩。 在此类系统上,在其他条件相同的情况下,libjpeg-turbo 通常比 libjpeg 快 2-6 倍。 在其他类型的系统上,libjpeg-turbo 凭借其高度优化的 Huffman 编码例程,仍然可以显着优于 libjpeg。 在许多情况下,libjpeg-turbo 的性能可与专有高速 JPEG 编解码器相媲美。
libjpeg-turbo 实现了传统的 libjpeg API 和功能较弱但更简单的 TurboJPEG API。 libjpeg-turbo 还具有色彩空间扩展功能,允许其压缩/解压缩到 32 位和大端像素缓冲区(RGBX、XBGR 等),以及功能齐全的 Java 接口。
Libjpeg-turbo是经典 libjpeg 库的一个符合 API/ABI 规范的分支,旨在提供最快的编码和解码速度。除了标准的 libjpeg API 之外,该库还提供了其自身的 TurboJPEG API 以及一系列扩展,这些扩展支持多种颜色渲染模型,允许将图像压缩到 32 位像素缓冲区(RGBX、XBGR)或进行解码。
在其他架构上,加速效果并不那么显著,但由于使用了优化的霍夫曼编码函数,该库仍然明显比 libjpeg 快,并且在性能方面接近高质量的专有 JPEG 编解码器。
值得一提的是,ibjpeg-turbo 最近发布了新的 3.0 分支,新版本的主要创新点如下:
- 添加了对 4:1:1 颜色二次采样的支持,允许您在不损失质量的情况下转换、裁剪和旋转 4:1:1 二次采样 JPEG 图像,以及将其解压缩并转换为 YUV 颜色模型。
- 显着加速最佳霍夫曼表的计算。 对于小图像 (256×256),这一变化使压缩时间最多减少两倍。
- 添加了对具有每通道 12 位颜色表示的 JPEG 图像应用算术熵编码的功能。
- TurboJPEG API 经过重大重新设计,消除了现有限制并提高了可扩展性。 例如,所有 C 函数现在都以“tj3”为前缀。
- 许多标志和模式已从函数参数转换为通用 API 参数。
- 在有损和无损模式下支持每通道 12 和 16 位颜色的图像。
- 添加了无损 JPEG 文件模式,适用于每通道 8、12 和 16 位颜色的图像。 添加了新函数 jpeg_enable_lossless() 和命令行选项“-lossless”。
- 删除了 Java TurboJPEG API 中已弃用的字段、构造函数和方法。
最后,应该提到的是,未来 libjpeg-turbo 的作者打算将该项目的工作限制为仅发布包含错误修复的更新。 在获得项目资金之前,新版本 3.1 的开发不会开始。
如果您对代码感兴趣,它以三种类似 BSD 的许可证发布:IJG 许可证、BSD 修改版许可证和 zlib 许可证。二进制文件适用于 Linux、macOS 和 Windows 系统。您可以点击以下链接查看更多详情并下载二进制文件。