在ImageMagick中,如何将图像缩小到足够小,使其';裁剪到特定的尺寸?

在ImageMagick中,如何将图像缩小到足够小,使其';裁剪到特定的尺寸?,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,例如,如果我有一个1600x1200的大图像,但我想生成一个250x200的缩略图(高度和宽度的不同比率)——我如何将其缩小到大小,然后对其进行中心裁剪?使用convert在一行中实现这一点吗?缩小并填充给定区域(如果需要,拉伸输出图像) 如果要缩小到250x200像素(不保持纵横比),完全填充250x200的空间(如有必要,拉伸/扭曲图像),请使用: (注意缩放几何设置后的\!字符!) 将.jpeg和.png后缀替换为您拥有和想要的任何格式后缀,ImageMagick将自动处理它 按比例缩小

例如,如果我有一个1600x1200的大图像,但我想生成一个250x200的缩略图(高度和宽度的不同比率)——我如何将其缩小到大小,然后对其进行中心裁剪?使用convert在一行中实现这一点吗?

缩小并填充给定区域(如果需要,拉伸输出图像) 如果要缩小到250x200像素(不保持纵横比),完全填充250x200的空间(如有必要,拉伸/扭曲图像),请使用:

(注意缩放几何设置后的
\!
字符!)
.jpeg
.png
后缀替换为您拥有和想要的任何格式后缀,ImageMagick将自动处理它


按比例缩小+将结果拟合到给定区域(并保持纵横比,如果需要,放弃部分给定区域) 如果要缩小到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的空间(但不裁剪任何溢出),请使用:

(请注意缩放几何设置后的
^
字符。
^
功能需要最低版本的ImageMagick 6.3.8-2。)
当使用
^
添加到
-scale
-resize
参数中修改宽度和高度时,这些设置被视为最小值,其中只有一个维度真正达到。这意味着:输出图像将展开或收缩,直到宽度或高度与其指定的尺寸匹配,从而保持图像的纵横比

上面的此命令“尝试”将尺寸设置为250x200:

  • 当高度从原稿的1200像素缩小到200像素时(到该原稿值的16.6666%),即可实现所需的缩放。宽度现在是266.66像素。这是四舍五入到267像素

  • 因此,最终尺寸将为267x200像素


按比例缩小,保持纵横比+并对给定区域进行裁剪 如果要缩放到250x200像素,保持纵横比,完全填充250x200的空间(从左边缘和右边缘裁剪条带),请使用:


图像的最终尺寸为250x200。与上一个命令(给出250x267结果)相比,左边缘和右边缘的一些像素列被删除。

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

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


convert input.jpg-刻度“250x200^”-重心-裁剪250x200+0+0输出。jpg

谢谢。-extent和-crop之间有什么区别?@ensnare:
-crop
从图像中剪切出一个(或多个)矩形区域
-extent
设置图像大小(以及,如果给定,图像偏移),如果图像被放大,未填充区域将设置为当前背景色。这两个选项都可以采用比当前图像更大或更小的尺寸,尽管这看起来有点违反直觉:“裁剪”到更大的区域,或“延伸”到更小的区域……因此两者之间没有太大的区别——除了
-crop
通常需要额外的
+repage
参数:(1)在裁剪之前将裁剪坐标框重新定位到当前可见图像(2)的左上角,或者在裁剪之后删除可能留下的页面偏移。在“按比例缩小以保持纵横比+并裁剪到给定区域”的示例中,-extent 250x250”是否假定为“-extent 250x200”“按比例缩小保持纵横比+按给定面积裁剪”的解决方案对我很有效。
  convert              \
     input.jpeg        \
    -scale 250x200     \
    -gravity center    \
    -background yellow \
    -extent 250x200    \
     output3.png
  convert             \
     input.jpeg       \
    -scale '250x200^' \
     output4.png
  convert             \
     input.jpeg       \
    -scale '250x200^' \
    -gravity center   \
    -extent 250x250   \
     output5.png