How to resize an image in imagemagick but keep an aspect ratio constant

烈酒焚心 提交于 2020-01-04 13:58:13

问题


I am trying to resize an image (using imagemagick) to keep it's current aspect ratio but fit it into a 4/3 container.

This is the command I have so far:

magick convert ./horse.jpeg -background white -gravity center -extent 4/3 ./hourse_output.jpeg

This is what I'd like:

. As you can see, the image is "put into" a 4/3 container.

回答1:


My error. The aspect ratios such as 4:3 in ImageMagick -extent will only crop and not pad.

See my bash unix script "aspectpad" at http://www.fmwconcepts.com/imagemagick/index.html, which does what you want I think.

Nevertheless, here is a partial solution for how to do it. But this only works for landscape mode input. Also only with ImageMagick 7 due to the use of inline arguments for -extent. You would have to modify it for portrait mode.

Input (aspect 2:1 = 2/1 = 2):

magick barn_2to1.jpg -set option:wd "%[fx:(4/3)>(w/h)?(4/3*h):w]" -set option:ht "%[fx:(4/3)>(w/h)?h:(w/(4/3))]" -gravity center -background black -extent "%[wd]x%[ht]" result.jpg


Output (aspect 4:3 = 4/3 = 1.33):

Note, that I used background of black so that it was visible here. Change to any other color you want.

If the input landscape aspect is larger than 4:3 (4/3), it will pad on top/bottom. If the input landscape aspect is smaller than 4:3, it will pad on left/right.

Input (aspect=1:1 = 1/1 = 1):

magick lena.jpg -set option:wd "%[fx:(4/3)>(w/h)?(4/3*h):w]" -set option:ht "%[fx:(4/3)>(w/h)?h:(w/(4/3))]" -gravity center -background black -extent "%[wd]x%[ht]" result2.jpg





回答2:


Use 4:3 not 4/3. But you have not specified any -resize. In ImageMagick 7, use magick only, not magick convert and not convert. For other tools, use magick identify, magick mogrify, etc. But not for convert. See imagemagick.org/script/command-line-processing.php#geometry for the 4:3 issue.




回答3:


Here is one other way to do it in ImageMagick, if you know the picture is in landscape mode and the image w/h aspect is larger then 4/3. Just pad the top and bottom with plenty of room and then use -extent 4:3 to crop it. This way no computations are needed, so it should work in ImageMagick 6 or 7. If ImageMagick 6, change magick to convert. (If the w/h is less than 4/3 landscape, then pad the left and right.)

Input:

magick barn_2to1.jpg -gravity center -bordercolor black -border 0x100 -background black -extent 4:3 result3.jpg




来源:https://stackoverflow.com/questions/56672830/how-to-resize-an-image-in-imagemagick-but-keep-an-aspect-ratio-constant

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!