ImageMagick 几何参数速查
ImageMagick 里最容易踩坑的地方:几何参数后面那个符号,决定了完全不同的行为。
| 写法 | 含义 | 实际发生什么 |
|---|---|---|
800x600 | 适应框内 | 缩小到宽高都放得进为止。保持比例,所以通常有一边会小于 800×600。 |
800x600! | 强制精确尺寸 | 忽略比例直接拉伸。几乎不会是你想要的。 |
800x600^ | 填满框,允许溢出 | 缩放到宽高都至少达到 800×600。配合 -gravity center -extent 800x600 裁掉溢出。 |
800x600> | 仅当更大时缩小 | 本来就更小的图原样通过。处理用户上传时的安全默认。 |
800x600< | 仅当更小时放大 | 本来就更大的图原样通过。 |
50% | 按原图百分比 | 两条边同时缩放。写成 50%x25% 可以分别控制。 |
1000000@ | 按总像素数 | 限制的是面积而不是宽或高 — 适合形状各异的一批图。 |
800 | 仅指定宽度 | 高度按原比例自动计算。 |
x600 | 仅指定高度 | 前面那个 x 才让它变成高度。漏掉它是最常见的 ImageMagick 错误。 |
800x600+30+20 | 尺寸加偏移 | 用于 -crop、-extent、-geometry。偏移从左上角算起;设了 -gravity 则从锚点算起。 |
+24+24 | 仅偏移 | 配合 -gravity southeast 时,表示从右下角向内 24px。 |
为什么值得把这个搞清楚
ImageMagick 的困惑基本都能追溯到两件事 —— 参数顺序,和几何后缀。上面这张表讲的是第二件。五个字符,每一个都把 -resize 变成不同的操作,而参数名里一点都看不出来。
几何语法不只属于 -resize。-crop、-extent、-geometry、-border、-splice 和 -thumbnail 读的都是同一套语法,只是不是每个操作都支持全部后缀。
记得加引号
^ > < ! 全都是 shell 元字符。在 bash 里不加引号,-resize 800x600> 会被当成重定向:你会得到一张被无条件缩放的图,外加一个叫 600 的空文件,而且不报错。各 shell 的规则见引号问题那一页。