jpegoptim vs jpegtran vs mozjpeg

标签 jpeg libjpeg-turbo jpegoptim jpegtran mozjpeg

我发现关于这个问题的两篇博客文章略有冲突,我在这里总结一下:

更令人困惑的是,这 Reddit thread建议 mozjpeg 使用与 jpegcrush 中使用的相同算法,并且 jpegcrush 是 jpegtran 的包装器......所以我们已经回到原点了?我只能假设那些 Reddit 评论是错误的,有人能证实吗?

最佳答案

MozJPEG 库使用一种受 jpegcrush(优化渐进扫描)启发的算法,但从技术上讲,它是一种全新的实现。

MozJPEG 库是流行的 libjpeg 的直接替代品,因此几乎每个 JPEG 相关工具都可以以“常规”和“MozJPEG”风格进行编译。

存在“常规”jpegtranjpegtran 的 MozJPEG 版本。这是同一个程序,但 MozJPEG 版本具有不同的默认设置,并执行额外的工作以更好地压缩。

类似地,jpegoptim 通常使用库存 libjpeg 构建,但也可以使用 MozJPEG 版本的 libjpeg 构建(例如 ImageOptim 就是这样做的)。

<小时/>

有两种使用 MozJPEG 的方法:

  1. 无损(获取现有的 JPEG 文件并将其缩小一点)。这就是 MozJPEG 的 jpegtran 的作用。
  2. 有损(从未压缩的像素创建新的 JPEG 文件,具有更高的质量/文件大小比)。这就是 MozJPEG 的 cjpeg 所做的事情,并且 jpegoptim 等其他工具也可以与 MozJPEG 一起使用。

两种操作模式都比普通的非优化 libjpeg 慢。无损优化所做的工作较少,但获得的增益也较小。

更精确的速度分析在这里:https://libjpeg-turbo.org/About/Mozjpeg

请注意,这里的“慢”是相对的。从绝对值来看,它每秒压缩几百万像素,因此对于大多数应用来说它可能足够快。

关于jpegoptim vs jpegtran vs mozjpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046782/

相关文章:

java - 无效的 JPEG 文件结构 : two SOI markers error?

c - 从源代码构建 libjepeg-turbo 不会构建库 libturbojpeg.so*

c++ - 我如何在 libjpeg-turbo 中使用 jpeg_mem_src、jpeg_mem_dest?

image - 如何缩小和优化图像?

c++ - 解码 JPEG 以获得未压缩的数据

java - 在图像中嵌入代码

python - 在 Python、ASP.NET 中读取和返回 jpg 文件?

c++ - 使用 libjpeg-turbo 的 TurboJPEG 的示例或教程

bash - 如何使用 find 命令为多个扩展运行批处理作业?