首页 > 解决方案 > 枕头 - 使用粘贴在不透明图像上的透明度

问题描述

让我先声明一下,我对成像/图形一无所知,所以也许我对这里的某些东西缺乏基本的了解。

我正在尝试将图像 ( game_image) 粘贴到我的基本图像 ( image) 上,并在顶部使用透明覆盖 ( overlay_image) 为文本添加一些变暗。

这是预期结果的示例:

在此处输入图像描述

这是我当前代码生成的示例:

在此处输入图像描述

这是我当前的代码:

from PIL import Image, ImageFont, ImageDraw

# base image sizing specific to Twitter recommended
base_image_size = (1600, 900)
base_image_mode = "RGBA"
base_image_background_color = (0, 52, 66)

image = Image.new(base_image_mode, base_image_size, base_image_background_color)

# game_image is the box art image on the left side of the card
game_image = Image.open("hunt.jpg")
image.paste(game_image)

# overlay_image is the darkened overlay over the left side of the card
overlay_image = Image.new(base_image_mode, base_image_size, (0, 0, 0))
overlay_image.putalpha(128)

# x position should be negative 50% of base canvas size
image.paste(overlay_image, (-800, 0), overlay_image)
image.save("test_image.png", format="PNG")

您可以看到游戏图像从叠加层继承了透明度。我怀疑这与mask我上面粘贴中添加的内容有关,但我尝试研究什么是遮罩,在我发现它的任何上下文中它都超出了我的理解。

感谢您对理解为什么会发生这种情况和/或我如何解决问题的任何帮助!

标签: pythonpython-3.xpython-imaging-library

解决方案


你非常接近......你所需要的只是使用Image.alpha_composite而不是paste. 因此,代码的最后两行应该是:

image = Image.alpha_composite(image, overlay_image)
image.save("test_image.png", format="PNG")

推荐阅读