如何在 Linux 上通过命令行压缩 JPEG 图像
问题:我有几张使用数码相机拍摄的 JPEG 照片图像。我想在将 JPEG 图片上传到 Dropbox 之前对其进行优化和压缩。在 Linux 上压缩 JPEG 图像而不损失其质量的最简单方法是什么?
当今拍照设备(例如智能手机、数码相机)的图像分辨率不断提高。即使是 36.3 像素的尼康 D800 最近也登陆了消费市场,而且这种趋势还将持续下去。虽然现代小工具不断产生越来越高分辨率的图像,但我们可能经常希望在将其上传到存储有限和带宽受限的云之前对其进行后处理和压缩其大小。
事实上,有一种方法可以在Linux上轻松压缩JPEG图像。名为 jpegoptim
的命令行工具允许您对 JPEG 图像进行无损优化,因此您可以在不牺牲质量的情况下压缩 JPEG 图片。如果您的存储或带宽预算非常低,jpegoptim
允许您通过调整图像质量来进行有损压缩。
对于那些对压缩 PNG 图像感兴趣的人,请参阅此指南。
在 Linux 上安装 jpegoptim
要在 Ubuntu、Debian 或 Linux Mint 上安装 jpegoptim
:
$ sudo apt-get install jpegoptim
要在 Fedora 上安装 jpegoptim
:
$ sudo yum install jpegoptim
要在 CentOS/RHEL 上安装 jpegoptim,首先启用 EPEL 存储库,然后运行:
$ sudo yum install jpegoptim
无损压缩 JPEG 图像
要无损压缩 JPG 图片,只需运行:
$ jpegoptim photo.jpg
photo.jpg 2048x1536 24bit N ICC JFIF [OK] 882178 --> 821064 bytes (6.93%), optimized.
请注意,原始输入图像将被压缩图像覆盖。
如果 jpegoptim 无法进一步无损优化图像,它将跳过覆盖它。
$ jpegoptim -v photo.jpg
photo.jpg 2048x1536 24bit N ICC JFIF [OK] 821064 --> 821064 bytes (0.00%), skipped.
如果要保留原始图像,请使用-d
选项指定目标目录。
$ jpegoptim -d ./compressed photo.jpg
然后,压缩图像将被放置在 ./compressed
目录中(与输入文件同名)。
如果您想保留文件创建/修改时间,请使用 -p
选项,如下所示。然后,压缩图像将被放置为与原始图像相同的日期和时间。
$ jpegoptim -d ./compressed -p photo.jpg
如果您只是检查可能的无损压缩比而不实际压缩它,请使用 -n 选项来模拟压缩。然后它会简单地打印结果而不实际执行压缩。
$ jpegoptim -n photo.jpg
有损压缩 JPEG 图像
如果您确实想节省存储空间,可以对大型 JPEG 图片进行有损压缩。
在这种情况下,请使用 -m
选项,其中最大质量在 0 到 100 的范围内指定(0 是最低质量,100 是最高质量)。
例如,要以 50% 的质量压缩图像:
$ jpegoptim -m50 photo.jpg
photo.jpg 2048x1536 24bit N ICC JFIF [OK] 882178 --> 301780 bytes (65.79%), optimized.
您将以降低质量为代价获得较小的图像。

批量压缩多个 JPEG 图像
很多时候,您需要在一个目录中压缩许多 JPEG 图像文件。在这种情况下,您可以使用以下 shell 脚本。
#!/bin/sh
# compress all *.jpg files in the current directory
# and place them in ./compressed directory
# with the same modification date as original files.
for i in *.jpg; do jpegoptim -d ./compressed -p "$i"; done
或者,使用 xargs 命令来实现相同的目的:
$ find . -name "*.jpg" | xargs jpegoptim -d ./compressed -p