如何批量减小JPEG图像文件的大小(/Mac)?

18

我在 Mac 上有一份 JPG 文件列表。我想将它们导出到每个图像小于 500 千字节的格式中。 我知道如何使用预览应用程序一次一个图像地完成此操作;但我希望能够批量处理,即同时处理多个文件。是否有命令行方式可以这样做,以便我可以编写脚本并在终端中运行它? 或者其他我可以使用的方法?


你想使用哪种占用空间更少的期望输出格式?在ImageMagick中,您可以使用mogrify命令在一个命令行中处理整个文件夹中的图像。请参见http://www.imagemagick.org/Usage/basics/#mogrify。如果输出也是JPG,则可以在命令行中更改-quality值。您可以使用Homebrew或MacPorts或从ImageMagick二进制文件安装ImageMagick。请参见http://www.imagemagick.org/script/download.php#macosx。 - fmw42
4个回答

22

这是一个使用命令行的例子,使用 convert (brew info imagemagick) 命令将目录中所有*.jpg图像转换为.png格式。

$ for i in *.jpg; do
convert "$i" "${i%.jpg}.png"
done

你可以在测试之前(dry-run)使用echo代替<command>

$ for i in *.jpg; do
echo "$i" "${i%.jpg}.png"
done

这将在目录中搜索具有扩展名.jpg的文件,然后执行命令convert,将文件名$i作为参数传递,并使用相同的文件名作为输出,删除扩展名并添加新的扩展名.png,实现方式如下:

"${i%.jpg}.png"

双引号 " 的使用是为了处理文件名中包含空格的情况,更多细节请参考:shell parameter expansion

例如,只需更改文件的质量,您可以使用:

convert "$i" -quality 80% "${i%.jpg}-new.jpg"

或者如果不需要保留原始内容:

mogrify -quality 80% *.jpg
主要的区别在于“convert”通常用于处理单个图像,而“mogrify”则适用于批处理多个文件。

14

安装ImageMagick。(真的..它很轻量级且好用)建议使用Homebrew来安装。然后...

  1. 打开终端。
  2. cd [图片文件夹路径] && mogrify -define jpeg:extent=60kb -resize 400 *.JPG
  3. 等待进程完成(如果您有许多图像,则可能需要几分钟)。
  4. 要检查文件大小,请尝试du -sh *以查看目录中每个文件的大小。

注意:*.JPG必须大写才能正常工作

如何运行:
cd [您的文件夹路径]将导航到您想要的目录
&&用于链接命令
mogrify用于保持相同的文件名
-define jpeg:extent=60kb设置最大文件大小为60kb
-resize 400将设置宽度
*.JPG代表您所在目录中的所有文件。

还有许多可以与imagemagick convert和mogrify一起使用的其他命令。安装完成后,您可以使用man mogrify查看可以链接到它的命令。

根据文档,“限制JPEG文件的最大大小,例如-define jpeg:extent=400KB。 JPEG编码器将搜索产生的输出文件不超过该值的最高压缩质量级别。从6.9.2-5版本开始,也将遵守-quality选项。在6.9.1-0和6.9.2-4之间,添加-quality 100以使jpeg:extent正常工作。在6.9.1-0之前,-quality设置将被忽略。”


4

从Homebrew或MacPorts或https://imagemagick.org/script/download.php#macosx下载并安装ImageMagick。然后使用mogrify使用-define jpeg:extent = 500KB将文件夹中的所有文件处理为JPG格式,并保存在test2文件夹中。

在我的桌面test1文件夹中有两个文件,处理后会将它们放入桌面上的test2文件夹中。

Before Processing:

mandril.tif 3.22428MB (3.2 MB)
zelda.png 726153B (726 KB)

cd
cd desktop/test1
mogrify -path ../test2 -format jpg -define jpeg:extent=500KB *

After Processing:

mandril.jpg 358570B (359 KB)
zelda.jpg 461810B (462 KB)

请查看https://imagemagick.org/Usage/basics/#mogrify

末尾的 * 表示处理文件夹中的所有文件。如果您想仅限于 jpg,则将其更改为 *.jpg。-format 表示您打算输出为 jpg。


0

免责声明:请小心,因为以下解决方案是“破坏性”命令,文件将直接被替换为较低质量的文件。

既然您已经阅读了我的免责声明,我建议您获取cwebp,您可以在这里下载。

您还需要并行sudo apt-get install -y parallel,然后我创造了以下脚本:

parallel cwebp {} -resize 0 640 -m 6 -sns 100 -q 80 -preset photo -segments 4 -f 100  -o {} ::: *.jpg && /
find -name "*.jpg" | parallel 'f="{}" ; mv -- {} ${f:0:-3}webp'

640 是生成文件的像素高度,0 表示宽度会根据宽高比自适应。 我将质量降低到了80%(-q 80),您可能不会注意到太大的区别。

第二行会找到所有已转换但仍然有错误扩展名(.jpg)的文件,然后去除最后3个字符(jpg),并替换为webp。

我从每个文件的5 Mb 减少到约50k(.jpg 图片的尺寸为4000x4000 像素),刚刚节省了20 Gb 的存储空间。希望您喜欢!

如果您不想使用webp格式,可以使用以下方法替代(也许需要安装imageMagick):

parallel convert {} -resize x640 -sampling-factor 4:2:0 -strip -quality 85 \
-interlace JPEG -colorspace RGB -define jpeg:dct-method=float {} ::: *.jpg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接