ImageMagick 缩放命令生成器
在线生成 ImageMagick 缩放命令。讲清 ^ ! > < % 各个后缀的区别,做不变形的定尺寸缩略图,IM7 与 IM6 语法一键切换。
缩放几乎是所有人用 ImageMagick 做的第一件事,也是最容易浪费时间的地方 —— 因为 -resize 的行为完全取决于你在尺寸后面加的那一个字符。
上面的生成器里选好参数复制命令就行。下面这段解释它到底做了什么,下次你可以自己写。
五种缩放行为
| 命令 | 结果 |
|---|---|
-resize 800x600 | 缩放到装得进 800×600。保持比例,所以通常有一边小于你填的值。 |
-resize 800x600! | 强制输出 800×600,比例不符时会把图压变形。 |
-resize '800x600^' | 填满目标框,某一边会溢出。配合 -extent 裁掉溢出部分。 |
-resize '800x600>' | 只在图更大时缩小。本来就小的原样通过。 |
-resize '800x600<' | 只在图更小时放大。 |
怎样缩放才不变形
给 -resize 一个不带任何符号的 宽x高,ImageMagick 永远不会变形 —— 它会把图装进这个框并保持比例。只有加了 ! 才会变形。
magick input.jpg -resize 1200x1200 output.jpg
只指定宽度,高度自动算
magick input.jpg -resize 800 output.jpg # 宽 800
magick input.jpg -resize x600 output.jpg # 高 600
前面那个 x 是 ImageMagick 里最常见的错误来源。-resize 600 是宽度,只有 -resize x600 才是高度。
做精确尺寸的缩略图且不变形
这是头像、商品图、卡片图真正该用的写法 —— 先缩放到覆盖目标框,再从中心裁掉溢出:
magick input.jpg -resize '400x400^' -gravity center -extent 400x400 output.jpg
这里直接用 -crop 是不行的:比 400×400 还小的图填不满画框。必须先用 ^ 保证覆盖。
只缩小不放大
处理用户上传的标准安全写法:
magick input.jpg -resize '1600x1600>' -quality 85 output.jpg
那个 > 必须加引号。不加的话 shell 会把它当成输出重定向,悄悄吞掉,然后建一个名叫 1600 的空文件 —— 不报错,但结果是错的。
该用哪个缩放操作
-resize—— 带滤镜的高质量重采样。默认选它。-thumbnail—— 先快速预缩放再 resize,并自动-strip。做画廊缩略图最快,但它会丢掉 ICC 色彩描述文件和 EXIF。-scale—— 简单像素平均,不用滤镜。像素图和马赛克效果用它。-sample—— 纯最近邻,只挑像素不做任何混合。
缩小之后要补锐化
任何缩小都会让边缘变软。一个保守的 USM 锐化能找回来,又不会出白边:
magick input.jpg -resize 1200 -unsharp 0x0.75+0.75+0.008 output.jpg
批量缩放整个文件夹
mkdir -p out
for f in *.jpg; do
magick "$f" -resize '1600x1600>' -quality 85 "out/${f%.*}.jpg"
done
mogrify -resize '1600x1600>' *.jpg 一行就能做同样的事,但它会就地覆盖原文件。要用的话务必加 -path out。上面的生成器里勾「批量模式」可以直接拿到对应 shell 的循环写法。