CLI AI

用命令行批量调整文件夹里所有图片的大小

2026-06-24

magick mogrify -resize 800x800 *.png 一条命令就能缩小文件夹里的所有图片——但 mogrify 会在处理过程中直接覆盖原文件,这是大多数教程都不提的坑。下面还会讲清楚:如何缩小单张图片而不变形,用两行循环把结果保存到另一个文件夹而不是毁掉原图,以及一个真实测量结果——缩小尺寸不代表文件会变小。

1. 缩小单张图片,保持比例

clai
$ clai 把这张图片缩小到长边320像素→ magick test1.png -resize 320x320 out1.jpg

320x320 是一个约束框,不是固定尺寸:ImageMagick 会保持宽高比,把图片缩放进这个框里。800x600 的原图变成了 320x240。

2. 尺寸变小不代表文件变小

clai
$ clai 比较一下前后的文件大小→ identify -format '%wx%h %b\n' test1.png out1.jpg800x600 382B320x240 1188B

这是真实测量出来的结果,不是猜测。一张纯色填充的 PNG 只有 382 字节;缩小到 320x240 并转成 JPEG 后,变成了 1188 字节——反而大了三倍。PNG 对纯色区域的压缩几乎完美,JPEG 并不擅长这个。永远要检查结果,而不是想当然。

3. 一次处理整个文件夹,但要安全

clai
$ clai 把这个文件夹里所有png缩小到800像素,原图不要动→ mkdir -p resized && for f in *.png; do magick "$f" -resize 800x800 "resized/$f"; done

一个把结果写到独立目录的循环。$f 外面的引号是必须的——少了它们,第一个带空格的文件名就会打断整个处理。

4. mogrify:快,但不可逆

clai
$ clai 直接原地缩小这个文件夹里的所有图片→ magick mogrify -resize 800x800 *.png⚠ CAUTION — overwrites originals, no undo

mogrify 就是为原地批量处理设计的,正因为只做覆盖写入,所以比循环快。也正因为这样才危险:命令跑完,原图就没了。运行前先复制一份文件夹。

5. 给整个文件夹换格式

clai
$ clai 把这个文件夹里所有png转成质量85的jpeg→ magick mogrify -format jpg -quality 85 *.png

-format 会在旧文件旁边生成带新扩展名的文件——原来的 png 完全不受影响。这是 mogrify 唯一不会覆盖任何东西的模式。

6. 只缩小,不放大

clai
$ clai 只缩小那些超过1200像素的图片→ magick mogrify -resize '1200x1200>' *.jpg

> 符号的意思是「只在更大时才处理」。不加它,小图会被强行放大到 1200 并损失画质。引号是为了防止 shell 把 > 当成输出重定向——这是这个参数最常见的错误。

常见坑

  • mogrify 会覆盖原文件。 不是 convert,也不是 magick file out,而是 mogrify 本身。唯一的例外是 -format 模式,它只会生成新文件。
  • 在 ImageMagick 7 里命令叫 magick。 convert 是为兼容保留的,新装的版本里可能根本没有。magick mogrify 在两代版本里都能用。
  • -resize 不加符号也会放大图片。 修饰符:> 只缩小,< 只放大,! 忽略宽高比,^ 填满约束框并裁剪。

相关问题

怎么居中裁剪到精确尺寸? magick in.jpg -resize '400x400^' -gravity center -extent 400x400 out.jpg——先填满约束框,再裁掉多余部分。

不打开文件怎么看尺寸? identify -format '%wx%h %b\n' file.jpg。整个文件夹:identify -format '%wx%h %f\n' *.jpg。

ImageMagick 比在线工具好在哪? 文件不会离开本机,数量没有限制,一条命令能处理上千张图片。

相关阅读

描述你想要的效果,CliAI 会帮你写好 ImageMagick 参数,缩放和格式转换都不例外。一行命令安装。