magick mogrify -resize 800x800 *.png 一条命令就能缩小文件夹里的所有图片——但 mogrify 会在处理过程中直接覆盖原文件,这是大多数教程都不提的坑。下面还会讲清楚:如何缩小单张图片而不变形,用两行循环把结果保存到另一个文件夹而不是毁掉原图,以及一个真实测量结果——缩小尺寸不代表文件会变小。
1. 缩小单张图片,保持比例
$ clai 把这张图片缩小到长边320像素→ magick test1.png -resize 320x320 out1.jpg
320x320 是一个约束框,不是固定尺寸:ImageMagick 会保持宽高比,把图片缩放进这个框里。800x600 的原图变成了 320x240。
2. 尺寸变小不代表文件变小
$ clai 比较一下前后的文件大小→ identify -format '%wx%h %b\n' test1.png out1.jpg800x600 382B320x240 1188B
这是真实测量出来的结果,不是猜测。一张纯色填充的 PNG 只有 382 字节;缩小到 320x240 并转成 JPEG 后,变成了 1188 字节——反而大了三倍。PNG 对纯色区域的压缩几乎完美,JPEG 并不擅长这个。永远要检查结果,而不是想当然。
3. 一次处理整个文件夹,但要安全
$ clai 把这个文件夹里所有png缩小到800像素,原图不要动→ mkdir -p resized && for f in *.png; do magick "$f" -resize 800x800 "resized/$f"; done
一个把结果写到独立目录的循环。$f 外面的引号是必须的——少了它们,第一个带空格的文件名就会打断整个处理。
4. mogrify:快,但不可逆
$ clai 直接原地缩小这个文件夹里的所有图片→ magick mogrify -resize 800x800 *.png⚠ CAUTION — overwrites originals, no undo
mogrify 就是为原地批量处理设计的,正因为只做覆盖写入,所以比循环快。也正因为这样才危险:命令跑完,原图就没了。运行前先复制一份文件夹。
5. 给整个文件夹换格式
$ clai 把这个文件夹里所有png转成质量85的jpeg→ magick mogrify -format jpg -quality 85 *.png
-format 会在旧文件旁边生成带新扩展名的文件——原来的 png 完全不受影响。这是 mogrify 唯一不会覆盖任何东西的模式。
6. 只缩小,不放大
$ 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 参数,缩放和格式转换都不例外。一行命令安装。