Python Wand 如何调整大小保持宽高比并用透明填充剩余空间

4 投票
1 回答
3647 浏览
提问于 2025-04-18 18:08

我想用Python的Wand库来调整一张图片的大小,同时保持它的宽高比,并把剩下的地方填充为透明。例如,我想把一张大长方形的图片缩小到适合100x100的尺寸,同时保持宽高比,但我希望得到的图片是100x100的,并且空白的地方是透明的。请问用Wand可以做到吗?

我试过使用img.resize()和img.transform(),但它们似乎只是保持了宽高比,并没有调整到我想要的图片大小。

如果Wand做不到,有没有其他的库可以实现这个功能?

谢谢你的帮助!

1 个回答

8

我的解决办法是先创建一个空白的外部图像,然后把变换后的图像放在上面。这样做可以确保图像的宽度和高度符合预期,同时在这些范围内放置图像时还能保持图像的比例。

def resizeImg(sourceFile, destFile, width, height):                                                                                                                                                                                                                                       
  with Image(width=width, height=height) as outerImg:                                                                                                                                                                                                                                     
    with Image(filename=sourceFile) as img:                                                                                                                                                                                                                                               
      img.transform(resize="%dx%d>" % (width, height))                                                                                                                                                                                                                                    
      outerImg.format = img.format.lower()                                                                                                                                                                                                                                                
      outerImg.composite(img, left=(width - img.width) / 2, top=(height - img.height) / 2)                                                                                                                                                                                                
      outerImg.save(filename=destFile)

撰写回答