Слияние фона с прозрачным изображением в PIL

У меня есть изображение в формате png в качестве фона, и я хочу добавить к этому фону прозрачную сетку, но это не работает должным образом. Фоновое изображение преобразуется в прозрачное в тех местах, где я применяю прозрачную сетку.

Я делаю:

from PIL import Image, ImageDraw

map_background = Image.open(MAP_BACKGROUND_FILE).convert('RGBA')
map_mesh = Image.new('RGBA', (width, height), (0, 0, 0, 0))
draw = ImageDraw.Draw(map_mesh)

# Create mesh using: draw.line([...], fill=(255, 255, 255, 50), width=1)
...

map_background.paste(map_mesh, (0, 0), map_mesh)

Но результат такой:

enter image description here

Если внимательно присмотреться, можно увидеть шахматную доску (используется в графических программах как фон). Прозрачные линии делают фоновый слой прозрачным в тех местах, где встречаются оба слоя. Но я хочу, чтобы прозрачная линия была добавлена ​​только поверх фона.

Я могу решить это с помощью:

map_background.paste((255,255,255), (0, 0), map_mesh)

но поскольку я использую разные цвета для разных линий, мне пришлось бы сделать этот процесс для каждого цвета. Если бы у меня было 100 цветов, то мне нужно 100 слоев, что не очень удачное решение.

6
задан Brian Burns 30 May 2018 в 08:33
поделиться