mozjpeg 项目最近发布了 2.1 版本。其目标是在保持与绝大多数现有解码器兼容性的同时,提高 JPEG 编码相较于现有编码器的效率。
我想解释一下如何使用此软件来减小 JPEG 图片的大小。具体来说,我将介绍 mozjpeg 的 cjpeg
命令行实用程序的使用方法。
构建 mozjpeg
目前没有可用的官方 mozjpeg 二进制文件,因此您需要从源代码构建该项目。您可以 下载最新版本的源代码,并按照 BUILDING.txt 文件 中的说明进行操作。
在 Linux 和 OS X 上构建非常简单。在 Windows 上稍微复杂一些,但仍然相对容易。mozjpeg 项目正在考虑将来提供二进制版本。
构建 mozjpeg 后,您将生成一个名为 cjpeg
的命令行工具。这是 mozjpeg 附带的编码程序。解码器称为 djpeg
。
输入图像格式
cjpeg
工具能够处理以下输入文件类型:targa、bmp、ppm 和 jpg。
能够将 JPEG 文件作为输入是 mozjpeg 的一项新功能,其他项目的 cjpeg
工具中尚不存在此功能。添加此功能是为了简化重新压缩工作流程。无需将 JPEG 转换为 BMP 或其他格式,然后重新编码,您只需将 JPEG 直接传递给 cjpeg
编码器即可。
如果您想从 cjpeg
不支持的文件类型创建 JPEG,可以查看 ImageMagick 工具。它们包含一个名为 convert
的命令行实用程序,可以将多种类型的图像相互转换。
cjpeg
命令行工具的基本用法
大多数使用 mozjpeg 的 cjpeg
用户都使用其最简单的形式
$ cjpeg -quality 80 foo.bmp > bar.jpg
这将从“foo.bmp”输入文件创建名为“bar.jpg”的 JPEG 文件,质量级别为 80。cjpeg
直接输出生成的 JPEG 文件的内容,因此,如果您想将其写入磁盘(您可能希望这样做),则需要使用“>
”将结果输出到文件。
选择质量级别
质量范围从低端的 0 到高端的 100。大多数用户会选择 60 到 90 之间的质量值。您应该使用仍然能够生成您满意质量的图像的最低值,因为较低的值会生成文件较小的图像。
下图显示了一个原始图像以及使用 mozjpeg 的 cjpeg
以五个不同质量级别编码的同一图像。单击图像以放大。
以下是逐个的图像文件
(图片由 Soulmatesphotography 提供,来自维基百科,知识共享署名-相同方式共享 3.0 未移植版本许可证)
进行一些试验。很多人没有做,错过了大幅减少文件大小的机会。他们的想法通常是“80 似乎是一个不错的折衷方案,我听说大多数人都是这么做的,所以我也这么做。”如果您无法区分质量为 77 和 80 的图像,并且您正在使用 80,那么您就错过了在不影响质量的情况下大幅节省文件大小的机会。
渐进式 JPEG 与基线 JPEG
mozjpeg 版本的 cjpeg
默认生成渐进式 JPEG,因为它们的文件大小往往比基线 JPEG 小约 4%。渐进式 JPEG 可以先以较低分辨率显示,然后随着图像下载逐渐提高分辨率直至完整显示。基线 JPEG 则从上到下加载。
渐进式
(图片由 Soulmatesphotography 提供,来自维基百科,知识共享署名-相同方式共享 3.0 未移植版本许可证)
如果您想生成基线 JPEG,可以按如下方式操作
$ cjpeg -baseline -quality 80 foo.bmp > bar.jpg
目标指标
mozjpeg 的 cjpeg
的一个很酷的功能是,您可以针对四个特定的质量指标进行优化:PSNR、PSNR-HVS-M、SSIM 和 MS-SSIM。这些指标是用于计算图像相较于原始图像质量的算法。更科学地说,这通常被称为失真率。
这些算法在定义质量的方式上有所不同,因此针对一个指标进行优化可能会影响另一个指标的性能。请参阅 Mozilla 2014 年 7 月有损压缩图像研究,其中包含许多此类示例。
mozjpeg 默认针对 PSNR-HVS-M 进行优化,因为针对此指标进行优化在所有指标上的表现都相当不错。
如果您或您的组织认为某个特定指标比其他指标更可靠,您可以告知 mozjpeg 的 cjpeg
工具您的偏好,它将针对该指标进行优化。
结论
希望此时您已经了解了足够的信息,可以自信地开始使用 mozjpeg 来优化您的 JPEG 图片。如果您遇到任何问题,请在 mozjpeg 的 GitHub 问题跟踪器 上报告。
关于 Robert Nyman [荣誉编辑]
Mozilla Hacks 的技术布道师和编辑。发表关于 HTML5、JavaScript 和开放网络的演讲和博客文章。Robert 是 HTML5 和开放网络的坚定支持者,自 1999 年以来一直从事 Web 前端开发工作 - 在瑞典和纽约市。他还定期在 http://robertnyman.com 上发表博客文章,并且喜欢旅行和结识新朋友。
27 条评论