ImageMagick - 如何强制最小/最大高度/宽度?

Hen*_*ryh 12 unix command-line imagemagick

使用ImageMagick,如何调整图像大小以使其最小化:

  • 高度为150px
  • 宽度为200px

并且还有一个最大值:

  • 高度为225px
  • 宽度为275px

更新:

如果它有帮助,这里是我正在经历的进一步解释.

我有一系列具有不同比例尺寸的图像.一些图像具有1:5的高/宽比.有些具有5:1的高/宽比.所以我想要做的是设置图像的最小高度/宽度大小,但也不希望图像大小大于特定大小.

如果我需要对图像应用白色填充以使其适合我的约束,这样我就不必扭曲图像,我想这样做.

Pek*_*ica 12

我无法完全理解您的要求,但我认为如果您运行IM两次,这应该是可能的.

请参阅几何选项手册:

结合的

widthxheight>根据widthxheight更改,但仅在图像尺寸超出指定尺寸时更改.

widthxheight ^ 给定宽度和高度的最小值,保留纵横比.

可能会做的伎俩.但是,对于宽高比超出您要求的图像,我认为您必须在IM中创建一个固定大小的画布,用一些颜色填充它,插入图像,然后trim()对其进行操作......可能一次性不可能但是.


Pet*_*ons 7

好的,我做了一些类似的处理.我没有任意大小和宽高比的通用解决方案,但如果您的输入图像集是1:5或5:1,您可以将它们分为2类,并使用其中一些代码片段进行相应处理.

步骤1:确定图像的纵横比,并根据该纵横比设置目标最终更改尺寸.

INPATH="path/to/your_file.jpg"
DIMS=`identify "${INPATH}" | awk '{print $3}'`
WIDTH=`echo "${DIMS}"| cut -dx -f1`
HEIGHT=`echo "${DIMS}"| cut -dx -f2`
if (( ${WIDTH} > ${HEIGHT} ));
then
    #file is in landscape orientation
    THUMBDIM="80x60"
    WEBDIM="624x480"
else
    #file is in portrait orientation
    echo -n "(Portrait orientation) "
    THUMBDIM="60x80"
    WEBDIM="480x624"
fi
Run Code Online (Sandbox Code Playgroud)

第2步,做实际调整大小:

convert "${INPATH}" -resize "${THUMBDIM}" "resized-${INPATH}"
Run Code Online (Sandbox Code Playgroud)

此示例假定一组固定的所需大小,但当然您可以使用原始尺寸作为输入进行一些基本算术,并按比例放大以适合您指定的边界.


kak*_*wao 6

使用ImageMagick,您只需要mogrify两遍:一次放大小于所需最小限度的路径,另一次缩小大于最大限度的路径。例如,要批量调整一堆JPEG大小:

mogrify '*.jpg[!200x150<]'
mogrify '*.jpg[!275x225>]'
Run Code Online (Sandbox Code Playgroud)

第一遍放大小于200x150的图像,第二遍缩小大于275x225的图像(是的,符号正确!)。mogrify替换原始图像,这是您在这种情况下需要做的,以避免在每次通过时重新调整图像的大小,并最终得到两个已处理的副本。

即使它们是两次通过,您也只能处理每个图像一次(几乎,请参阅下文)。假定需要调整所有图像的大小,第一个处理x%的图像,其他遍处理剩余的100- x%(加c,请参见下文)。

!用于对超出范围(我们的常数c)的图像(例如1200x100的图像)强制改变宽高比,无论275x225还是200x150都不适合。这些图像 将被处理两次:在第一遍中,范围(高度或宽度)以下的方面将增加到最小,在第二遍中,其他方面将减少到最大。

希望能有所帮助。