使用Wand和ImageMagick更改画布大小而不重新缩放图像

时间:2015-09-01 17:20:52

标签: python imagemagick wand

我想让我的图像成为正方形而不影响它们的宽高比,所以我需要填充画布大小,例如使高度与宽度一样大,然后我可以重新缩放图像。我没有看到这样做的聪明方法。我查看了文档,但没有看到任何内容:http://docs.wand-py.org/

似乎调整大小或庄稼不会这样做。我试过了:

img.crop(0, 0, width=dim, height=dim)

我很欣赏这个例程可能取决于背景,但如果我为了简单而假设图像都具有白色背景(稍后我可能想要采样并添加背景类型)。

3 个答案:

答案 0 :(得分:2)

如果您从命令行开始使用如下图像:

convert -size 200x120 xc:red a.png

enter image description here

并将其调整为100x100,如下所示:

convert a.png -resize 100x100 b.png

你会得到一张100x60的图像,因为ImageMagick希望保持这个比例。如果您希望将图像填充到正方形,则需要使用-extent这样的(我已将背景设为黄色以便您可以看到它):

convert a.png -resize 100x100 -background yellow -gravity center -extent 100x100 b.png

enter image description here

我没有在Python Wand文档中看到任何关于-extent的提及,所以我认为它不存在。因此,我想你可能需要制作一个新的第二个方形图像,并将调整后的图像合成到它上面。除非其他人知道更好......

答案 1 :(得分:1)

Wand提供变换,可以在保持纵横比的同时将图像缩放到所需的大小。你可以用透明背景填充它,使其在以后完全变成正方形。

def adjust_ratio(img, w_dst, h_dst):

    img.transform(resize="{0}x{1}".format(w_dst,h_dst))

    w_bor = (w_dst - self.img.width)/2
    h_bor = (h_dst - self.img.height)/2

    if w_bor>0:
        img.border(color=Color('transparent'),width=w_bor,height=0)
    else:
        img.border(color=Color('transparent'),width=0,height=h_bor)

答案 2 :(得分:0)

使用注释中的Luke代码,我已经达到了预期的效果。

在没有什么改进的情况下,如果您还想向图像添加填充,则可以设置填充变量。

View