使用ImageMagick将图像放置在较大的画布内

71

开始使用ImageMagic并尝试寻找方法来完成以下操作... 如果一张图片的高度或宽度小于50像素,则我想将其(无需缩放)置于一个新的50x50像素画布的水平/垂直中心,并保存为新的图像。 有人知道是否可以使用ImageMagick实现这个功能吗?谢谢!


你使用的是哪个API? - John
8个回答

127

我使用了 -extent 命令来实现这个功能:

convert input.jpg -gravity center -background white -extent 50x50  output.jpg

15
对于我来说,应该在-extent之前放置重力属性: convert bg.png -gravity center -extent 640x960 -background white ../default@2x.png - Cfr
8
在使用-extent之前,必须先设置好 -background。在上面的例子中,它起到了默认将背景设置为白色的作用。 - theta
4
顺便说一下,如果要添加透明度,请使用“xc:transparent”作为背景参数。 - janos
1
有人能解释一下如何用PHP做到这一点吗?我尝试了这个确切的顺序,就我所理解的而言,我的图像总是出现在最左边和最上面,而不是居中。 - But those new buttons though..
我已经实现了这个功能,但是我想要调整大小的图片有一个透明背景,我想要将新添加的背景设置为另一种颜色(而不是修改已经透明的背景)。你有什么好的建议吗? - Adrian
显示剩余2条评论

10
我想做同样的事情,只是将图像缩小到内部的70%。我使用了以下代码:
convert input.png -resize 70%x70% -gravity center -background transparent -extent 72x72 output.png

虽然不是完全符合要求,但希望能对某些人有所帮助 ;).


1
将图像缩小到其本身大小的70%,然后放置在较大的画布上。也许这正是你想要的。但它并不会将图像缩小到画布大小的70%。 - caw

6

我曾经使用过这段代码在一个白色背景的画布中将图片居中。希望这能对你有所帮助。

convert -background white -gravity center your_image.jpg -extent 50x50 new_image.jpg

4

请参考图片裁剪和边缘处理以获取大量示例。下面是一种简单的实现方法:

convert input.png -bordercolor Black -border 5x5 output.png

当然,您需要根据输入图像的尺寸计算要添加的边框大小(如果有)。您使用的是ImageMagick API还是仅使用命令行工具?

那可能不是问题的解决方案,但因为它帮助我创建了9patch图像,所以还是点个赞吧 :) - unexist

3
我尝试了这个:
convert test.jpg -resize 100x100 -background black -gravity center -extent 100x100 output.png

2
您可以使用单一组合来完成这个操作。所以它看起来应该像这样: convert -size 50x50 xc:white null: ( my_image.png -coalesce ) -gravity Center -layers Composite -layers Optimize output.png

1

要修改源图像,您需要使用mogrify:

mogrify -gravity center -background white -extent 50x50  source.jpg

0
如果一张图片的高度或宽度小于50像素,根据我的情况来看,这些图片比目标画布要大得多,并且不是正方形的。所以我按比例调整它们的大小以适应画布内部。例如:
convert in.png -resize 46x46 -background none -gravity center -extent 50x50 out.png

46x46的限制确保了至少2像素的边距。请注意,上述方法不会扭曲图像,例如矩形不会变成正方形。

我使用了background none来设置透明背景,但您也可以选择纯色背景。


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