mogrify批量裁剪会直接覆盖原图,必须先备份;安全做法是用magick命令配合-resize'800x600^'-gravity center-extent 800x600生成新文件。

用 mogrify 批量裁剪会直接覆盖原图,慎用
这是最常踩的坑:mogrify 默认就地修改文件,没备份等于没操作。如果你执行了 mogrify -crop 800x600+0+0 *.jpg,所有 JPG 都被立刻裁掉左上角区域,无法撤回。
真正安全的做法是:先建输出目录,用 convert(或新版 magick)逐个生成新文件:
- 创建独立目录:
mkdir -p cropped - 居中裁成 800×600:
for i in *.jpg; do magick "$i" -resize '800x600^' -gravity center -extent 800x600 "cropped/$i"; done - 注意引号包裹
"$i",防止文件名含空格时报错
-resize 'WxH^' 和 -resize 'WxH!' 的行为差异很关键
很多人以为 -resize 800x600 就是“变成 800×600”,其实不是——它只是把图像缩放到能完整放进 800×600 框里,保持比例,结果可能是 800×450 或 640×600。
真正要“等比放大/缩小后填满再裁”得加修饰符:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
-
'800x600^':放大到至少 800×600(最小边匹配),后续配合-gravity center -extent 800x600才能精准裁切 -
'800x600!':强制拉伸变形到 800×600,破坏比例,一般不用 - 纯缩放不裁剪?用
-resize '800x600>'(只对大于该尺寸的图缩放)或-resize '800x600(只对更小的图放大)
批量压缩体积需分两步:先缩放再专压
仅靠 magick -quality 75 压 JPG,效果有限;PNG 光靠 quality 参数甚至不生效。必须组合专用工具:
- JPG:用
jpegoptim --max=75 --strip-all cropped/*.jpg(二次压缩,去元数据、优化 Huffman 表) - PNG:用
oxipng -o 4 -i 0 cropped/*.png(无损压缩,-o4 是高压缩比) - 如果没装这些工具:
sudo apt install jpegoptim oxipng(Debian/Ubuntu) - 别跳过
--strip-all,EXIF 信息常占几百 KB
处理超大数量时,find + -exec 比 for 循环更稳
当图片超过 1 万张,bash 的 for i in *.jpg 可能因参数列表过长报错 Argument list too long。
换成 find 能绕过 shell 展开限制:
- 居中裁剪并压缩:
find . -name "*.jpg" -exec magick {} -resize '1200x800^' -gravity center -extent 1200x800 -quality 80 "resized/{}" \; - 注意结尾的
\;,不可省略 - 路径中含中文或特殊字符?加
-print0 | xargs -0组合更保险
真正难的不是命令本身,而是裁剪前没看清楚原始分辨率分布——有些图是竖构图,有些是横构图,统一用 -gravity center 裁可能把人脸切掉一半。建议先抽样跑 identify -format "%f %wx%h\n" *.jpg | head -20 看尺寸规律。

















