例如,如果我有一个 1600x1200 的大图像,但我想生成一个 250x200 的缩略图(高度和宽度的不同比例) - 我如何将其缩小到大小然后居中裁剪它?这可以在一行中使用转换吗?
2 回答
缩小+填充给定区域(如果需要,拉伸输出图像)
如果要缩小到 250x200 像素(不保持纵横比),完全填充 250x200 的空间(必要时拉伸/扭曲图像),请使用:
convert \
input.jpeg \
-scale 250x200\! \
output1.png
(注意\!
缩放几何设置后的字符!)用您拥有和想要的任何格式后缀
替换.jpeg
和后缀,ImageMagick 会自动处理它。.png
缩小+适合结果到给定区域(并保持纵横比,如果需要,放弃一些给定区域)
如果要缩小到250x200 像素内,同时保持原始图像的纵横比(高宽比)并裁剪未用完的 250x200 像素的尺寸,请使用:
convert \
input.jpeg \
-scale 250x200 \
output2.png
默认情况下,-resize
参数中给出的宽度和高度是最大值(除非您将其指定为百分比)。这意味着:输出图像扩展或收缩以适应指定的尺寸,保持图像的纵横比。
上面的这个命令“尝试”将尺寸设置为 250x200:
当高度从原来的 1200 像素缩小到 200 像素(到这个原始值的 16.6666%)时,宽度现在是 266.66 像素。所以还是不适合....
当宽度从原来的 1600 像素缩小到 250 像素(到这个原始值的 15.625%)时,高度现在是 187.5 像素。所以它现在适合,并且可以在顶部和底部留出一些空间。
所以最终尺寸将是 250x187 或更可能是 250x188 像素(高度中不能有像素的分数,它需要一个整数!)。
在给定区域中按比例缩小+中心结果(并使用一些背景颜色来填充剩余空间)
如果你想缩小到250x200 像素以内,保持原始的纵横比,并通过添加一些黄色背景来创建一个全尺寸 250x200 像素的图像,以该空间中的真实图像为中心,请使用:
convert \
input.jpeg \
-scale 250x200 \
-gravity center \
-background yellow \
-extent 250x200 \
output3.png
将背景颜色替换为您更喜欢的任何其他颜色,或者替换none
为透明背景(JPEG 输出不支持!)。
缩小保持纵横比+不裁剪到给定区域
如果要缩放到 250x200 像素并保持纵横比,完全填充 250x200 的空间(但不裁剪掉任何溢出),请使用:
convert \
input.jpeg \
-scale '250x200^' \
output4.png
(注意^
缩放几何设置后的字符。该^
功能需要 6.3.8-2 的最低 ImageMagick 版本。)
当使用或参数修改宽度和高度时^
,-scale
这些-resize
设置被认为是最小值,其中只有一个这些尺寸也确实达到了。这意味着:输出图像扩展或收缩,直到宽度或高度与其指定尺寸匹配,保持图像的纵横比。
上面的这个命令“尝试”将尺寸设置为 250x200:
当高度从原来的 1200 像素缩小到 200 像素(到这个原始值的 16.6666%)时,就实现了想要的缩放。宽度现在为 266.66 像素。这是四舍五入到 267 像素。
所以最终尺寸将是 267x200 像素。
按比例缩小保持纵横比+裁剪到给定区域
如果要缩放到 250x200 像素并保持纵横比,完全填充 250x200 的空间(从左右边缘裁剪掉条带),请使用:
convert \
input.jpeg \
-scale '250x200^' \
-gravity center \
-extent 250x250 \
output5.png
图像的最终尺寸为 250x200。与之前的命令(给出 250x267 结果)相比,删除了左右边缘的一些像素列。
接受的答案不符合问题的要求。
如果您需要精确的输出尺寸(例如 250x200),从原始图像中拟合最大信息并裁剪冗余部分以保持纵横比,请使用以下命令:
convert input.jpg -scale "250x200^" -gravity center -crop 250x200+0+0 output.jpg