如何使用ImageMagick调整图像大小但保持纵横比例不变

6

我正在尝试使用ImageMagick调整图像的大小,以使其保持当前的宽高比,并适配到一个4:3的容器中。

以下是我目前拥有的命令:

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

这是我想要的:马。正如你所看到的,图像被“放入”一个4:3的容器中。

相关:适配固定大小的框:https://dev59.com/pGMl5IYBdhLWcg3wTlcl#18514327 - Ciro Santilli OurBigBook.com
3个回答

5

我犯了错误。ImageMagick中的纵横比,例如4:3 -extent只会进行裁剪而不是填充。

请访问我的bash unix脚本“aspectpad”,网址为:http://www.fmwconcepts.com/imagemagick/index.html,它可以做到你想要的。

不过,以下是一个部分解决方案,仅适用于横向模式的输入,并且仅适用于使用内联参数的ImageMagick 7。你需要修改它以适应纵向模式。

输入(宽高比2:1 = 2/1 = 2):

enter image description here

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

输出(长宽比4:3 = 4/3 = 1.33):

enter image description here

请注意,我使用黑色背景以便在此处可见。您可以更改为任何其他颜色。

如果输入的横向比大于4:3(4/3),则会在顶部/底部填充。如果输入的横向比小于4:3,则会在左/右侧填充。

输入(长宽比=1:1 = 1/1 = 1):

enter image description here

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


enter image description here


谢谢!这正是我想要的。 - Some Guy
在ImageMagick 6.9.7.4上,mogrify 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失败了,错误提示为:mogrify-im6.q16: invalid argument for option %[wd]x%[ht]': -extent @ error/mogrify.c/MogrifyImageCommand/4819.`。 - Ciro Santilli OurBigBook.com
mogrify已经过时,不太可能支持-set选项,特别是在IM 6中。它可能在IM 7中工作,也可能不工作,但这时你需要使用magick mogrify命令。我建议您使用IM 7的magick命令,而不是magick mogrify。 - fmw42

0
使用4:3而非4/3。但是您尚未指定任何-resize选项。在ImageMagick 7中,仅使用magick命令,而不是magick convert或convert。对于其他工具,请使用magick identify、magick mogrify等,但不要使用convert命令。有关4:3问题,请参见imagemagick.org/script/command-line-processing.php#geometry。

感谢4:3的提示!然而,现在图像被拉伸了,而不是简单地“放置”到一个4:3的白色容器中。有什么想法吗? - Some Guy
请发布您的确切命令行、输入图像、ImageMagick版本和平台。您仍然没有展示在尝试将其包含在4:3背景中之前如何调整图像大小。 - fmw42
@fmw42 我不确定我是否想要调整大小,这就是我的问题所在。就像在原始帖子中一样,我想将任何图像放置在4:3的容器中,通过扩展底部然后居中(如图中所示),或者扩展右侧并居中。 - Some Guy

0

如果您知道图片是横向的,并且图像的宽高比大于4:3,那么这里有另一种使用ImageMagick的方法。只需在顶部和底部填充足够的空间,然后使用“-extent 4:3”进行裁剪。这样就不需要进行任何计算,因此它应该可以在ImageMagick 6或7中工作。如果是ImageMagick 6,请将magick更改为convert。(如果w/h小于4/3,则填充左侧和右侧。)

输入:

enter image description here

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


enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接