【问题标题】:ImageMagick: Change aspect ratio of image without cropping and within a max width and heightImageMagick:在最大宽度和高度内更改图像的纵横比而不裁剪
【发布时间】:2015-07-28 00:35:13
【问题描述】:

edit:最终目标是 2:1 的宽高比,没有裁剪,最大尺寸为 1260x630。如果图像尺寸最初低于 1260x630,则应保持在 1260x630 以下。

努力把这个词说得好(这很可能是我没有找到好的答案的原因)。

如果图像本身大于给定大小(宽度或高度),我正在尝试使用 ImageMagick 将图像大小调整为 1260x630。

调整大小后,我需要将纵横比更改为 2:1,而不切断图像。我已经使用以下方法通过较大的图像很好地完成了这一点:

convert foobar-original.jpg \
   -resize 1260x630\>       \
   -gravity center          \
   -extent 1260x630         \
    foobar.jpg

以 1500x500 的图片为例,使用上述方法,首先变为 1260x420(通过调整大小),然后变为 1260x630(通过范围),并且用白色背景填充多余的宽度。

但是,如果图像开始时较小,例如 800x200,则图像调整大小(如预期的那样),但随后会调整为适合完整的 1260x630。这不是预期的结果。

我宁愿-extent 简单地影响纵横比,根据需要添加白色。因此,不是将 800x200 图像转换为 1260x630,图像的 800x200 部分位于中心,而是将图像转换为 800x400(即 2:1 比例),额外的高度用空白填充。

基本上,我正在寻找一种将-extent 设置为纵横比而不是特定大小或百分比的方法。类似的东西

convert foobar-original.jpg \
   -resize 1260x630\>       \
   -gravity center          \
   -extent 2:1              \
    foobar.jpg

【问题讨论】:

    标签: image imagemagick image-resizing


    【解决方案1】:

    你正在做的第一次调整大小,

    -resize 1260x630\>
    

    操作为 “调整大小为 1260x630,但只缩小较大的图像(通过 > 标志)。

    你可以应用类似的操作,

    -resize 1260x630\<
    

    它以“调整到 1260x630,但只放大较小的图像(通过 &lt; 标志)运行。

    如果你在一个命令中结合这两个操作,你应该得到你想要的结果:

    convert foobar-original.jpg \
       -gravity center          \
       -resize  1260x630\>      \
       -resize  1260x630\<      \
       -extent  1260x630        \
        foobar.jpg
    

    【讨论】:

    • 嘿@KurtPfeifle,感谢您的回复!唯一的问题是您的解决方案的最终结果仍然是 1260x630 图像。 Fwiw,运行 > 和 -resize 1260x630\> -resize 1260x630\< == -resize 1260x630。有什么想法可以保持最终的 2:1 比例但不调整大小?这样最终的图像尺寸可能低于 1260x630。一张 800x200 的图片会变成一张 800x400 的图片。
    • 对不起,按三下回车,没有换档。上面的评论现在已经完全完成了。顺便说一句,干杯并感谢您对我原来的问题进行了编辑。它绝对是更具可读性的多行。
    • @SamThornton:……或者我误解了你的意图?我以为你想要1260x630结束格式?!
    • 是的,这有点复杂。最终目标是获得 2:1 的纵横比,不进行裁剪,最大图像尺寸为 1260x630。因此,如果图像最初小于 1260x630,它应该保持更小,只是改变纵横比。
    • 我的意思是最终结果是一样的。只运行 -resize 1260x630 而没有任何额外的运算符最终与使用这两个命令运行相同。在这两种情况下,所有图像(无论大小)都被调整为 1260x630。
    【解决方案2】:

    我遇到了类似的问题,最后写了一个批处理脚本:

    @echo off
    set magick_exe="C:\Programme Portable\ImageMagick-7.0.3-1\magick.exe"
    
    
    for /R %%f in (*.png) do (
      call :body "%%f"
    )
    
    pause
    goto :eof
    
    :body
    set FILE=%1
    echo %FILE%
    
    :start
    
    %magick_exe% identify -format "%%[w]" %FILE% > w.txt
    %magick_exe% identify -format "%%[h]" %FILE% > h.txt
    set /p WIDTH=<w.txt
    set /p HEIGHT=<h.txt
    set /a HEIGHT2=%HEIGHT%*2
    
    
    echo "size: " %WIDTH% x %HEIGHT% 
    
    if  %HEIGHT2% gtr %WIDTH% (
    
      if %HEIGHT% gtr 630 (
         echo Resize hight to 630
         %magick_exe% convert %FILE% -resize x630 %FILE%
        goto :start
      )
    
      set /a SIZE_X=%HEIGHT%*2
      set /a SIZE_Y=%HEIGHT%
    
    ) else (
    
      if %HEIGHT% gtr 1260 (
         echo Resize width to 1260
         %magick_exe% convert %FILE% -resize 1260 %FILE%
        goto :start
      )
    
      set /a SIZE_X=%WIDTH%
      set /a SIZE_Y=%WIDTH%/2
    
    
    )
    
    echo "new size :" %SIZE_X% x  %SIZE_Y%
    
    if %WIDTH% NEQ %HEIGHT2% ( %magick_exe% convert %FILE% -background white -gravity center -extent "%SIZE_X%x%SIZE_Y%"  %FILE% )
    
    echo.
    goto :eof
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 2017-03-16
      • 1970-01-01
      • 2021-10-26
      • 2018-09-28
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多