使用透明度生成具有不同大小的图层的合成图像

Chr*_*ris 10 python python-2.7 pillow

我是Python的新手,正在探索允许用户构建自定义图像的用途.我们的想法是客户端会选择一些选项,然后在服务器上创建图像然后下载(或用于服务器端的其他内容).

图像由许多图像组成,其中大多数是小图标类型的图像,这些图像是不规则形状并且具有透明度.所有图层都是.png文件.

我尝试使用枕头,但似乎图像需要与整个图像大小相同才能正确使用顶层的透明度.

这是我到目前为止所尝试的:

from PIL import Image

background = Image.open("Background.png")
foreground = Image.open("Trim.png")
fire = Image.open("Type_Fire_Large.png")

background = Image.alpha_composite(background, foreground)
background.paste(fire, (150, 150))
background.show()
Run Code Online (Sandbox Code Playgroud)

图像如下所示:

分层图像与黑色叠加

Background.png是阴影的"噪音",Trim.png是灰色的对角线.最好的部分:Trim.png中心透明,能够Background.png在中间显示.但它的尺寸也与图像相同.

问题是Fire; 请注意黑色边框(和奇数紫红色点)是如何的.文档指出叠加图像需要具有相同的大小.但似乎有人会想要在另一个图像上放置一个透明度较小的小图标并将它们组合成一个图像.

我不喜欢任何特定的图书馆,我对想法和替代方案持开放态度.我唯一想做的就是保持简单,所以创建一个完整的游戏引擎或类似的东西可能会产生太多.

小智 6

要将一个 png 粘贴到另一个 png 上,尊重透明度,请尝试

background.paste(fire, (x,y), fire.convert("RGBA"))
Run Code Online (Sandbox Code Playgroud)