ImageMagick 裁切命令生成器
生成 ImageMagick 裁切命令:按坐标裁、居中裁到指定尺寸、按比例裁、切成网格、自动去除纯色边框。并解释为什么必须加 +repage。
-crop 根据调用方式不同,实际上做的是四件很不一样的事;而且它会留下一个隐藏状态 —— 虚拟画布 —— 这正是后续操作出问题的主要原因。
按坐标裁一块矩形
magick input.jpg -crop 400x400+100+50 +repage output.jpg
几何格式是 宽 x 高 + X + Y,从左上角开始计算,原点是 +0+0。
居中裁到精确尺寸
如果源图有可能比目标还小,直接用 -crop 就错了 —— 你会得到一张比要求更小的图。正确做法是先缩放到覆盖,再裁:
magick input.jpg -resize '400x400^' -gravity center -extent 400x400 output.jpg
这样永远输出精确的 400×400,不变形,任何尺寸的输入都能处理。把 center 改成 north 可以让裁切偏向顶部 —— 拍人像时很有用,居中裁经常把头切掉。
按宽高比裁切
magick input.jpg -gravity center -crop 16:9 +repage output.jpg
ImageMagick 7 可以直接接一个比例,自动算出最大的匹配矩形。ImageMagick 6 不支持这个写法 —— IM6 上请用上面的居中裁切配具体像素值。
把一张图切成网格
magick input.jpg -crop 400x400 +repage tile_%02d.jpg
不带 +X+Y 偏移时,-crop 会把整张图切成网格。输出文件名必须带计数器(比如 %02d),否则每一块都会覆盖上一块。写在 Windows 的 .bat 文件里时,这个计数器要写成 %%02d。
自动去除纯色边框
magick input.jpg -fuzz 8% -trim +repage output.jpg
单独用 -trim 对真实照片和扫描件几乎从来不管用,因为边框颜色不可能完全均匀。-fuzz 容差才是让它真正生效的关键 —— 从 5–10% 开始往上调。
为什么需要 +repage
裁切并不是真的把周围的部分删掉,它记录了一个偏移到「虚拟画布」里,用来记住这块是从哪儿裁出来的。会保存偏移的格式(GIF 和 PNG)会带着这个信息,于是:
- 裁出来的 PNG 可能显示时带着莫名其妙的留白。
- 后续的
-composite或-extent会落在错误的位置。 identify报出来的画布尺寸和实际像素尺寸对不上。
+repage 就是用来丢掉这个偏移的。除非你确实需要保留画布,否则每次裁切后都加上它。
裁切和缩放一次完成
magick input.jpg -crop 1200x1200+200+100 +repage -resize 400x400 output.jpg
顺序有意义:操作类参数从左到右依次执行,所以这条是先裁后缩。