Подушка - Прозрачность поверх непрозрачного изображения с пастой - PullRequest
1 голос
/ 29 мая 2020

Позвольте мне добавить префикс отказа от ответственности, что я ничего не понимаю, когда дело доходит до изображений / графики в целом, так что, возможно, мне не хватает фундаментального понимания чего-то здесь.

Я пытаюсь вставить изображение (game_image) к моему базовому изображению (image) с прозрачным оверлеем (overlay_image) поверх, чтобы добавить затемнение текста.

Вот пример ожидаемого результата:

enter image description here

Вот пример того, что генерирует мой текущий код:

enter image description here

Здесь это мой текущий код:

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, добавленным в мою пасту выше, но я попытался выяснить, что такое маскирование, и это выходит за рамки моего понимания в любом контексте, в котором я его нахожу.

Любая помощь в понимании Приветствуется, почему это происходит и / или как я могу решить эту проблему!

1 Ответ

2 голосов
/ 29 мая 2020

Вы очень близки ... Все, что вам нужно, это использовать Image.alpha_composite вместо paste. Итак, последние две строки вашего кода должны быть:

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