ImageMagick:在没有裁剪的情况下更改图像的纵横比,并在最大宽度和高度范围内

时间:2015-05-16 00:08:25

标签: image imagemagick image-resizing

编辑:最终目标是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

2 个答案:

答案 0 :(得分:2)

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

<div class="form-group">
    <input type="text" id="to" placeholder="Enter E-mail which you want to verify" onblur="validateEmail(this);" required /><br>
    <button id="send_email" style="margin-top:10px;">Send Email</button><br> 
    <span id="message"></span>
</div>

操作为&#34;调整为1260x630,但仅缩小较大的图片&#34; (通过-resize 1260x630\> 标记)。

您可以申请类似的操作,

>

它的操作为&#34;调整为1260x630,但仅放大较小的图像&#34; (通过-resize 1260x630\< 标记)。

如果将两个操作组合在一个命令中,您应该得到所需的结果:

<

答案 1 :(得分:0)

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

@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