13

例如,如果我有一个 1600x1200 的大图像,但我想生成一个 250x200 的缩略图(高度和宽度的不同比例) - 我如何将其缩小到大小然后居中裁剪它?这可以在一行中使用转换吗?

4

2 回答 2

25

缩小+填充给定区域(如果需要,拉伸输出图像)

如果要缩小到 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 结果)相比,删除了左右边缘的一些像素列。

于 2012-08-31T23:21:34.777 回答
3

接受的答案不符合问题的要求。

如果您需要精确的输出尺寸(例如 250x200),从原始图像中拟合最大信息并裁剪冗余部分以保持纵横比,请使用以下命令:

convert input.jpg -scale "250x200^" -gravity center -crop 250x200+0+0 output.jpg

于 2015-12-26T12:14:29.650 回答