LINUX.ORG.RU

Объясните про paste и alpha_composite

 ,


1

1

Есть набор спрайтов с альфа-каналом, которые надо скомпоновать в картинку. PIL.Image.paste по умолчанию игнорирует альфа-канал. PIL.Image.alpha_composite не позвляет вставить спрайт в отрицательные координаты, то есть автоматически обрезать спрайт верхним или левым краем картинки.

Создать картинку побольше и обрезать — можно, но не нравится. Есть ли другие варианты alpha_composite? Или как использовать параметр mask в paste, чтобы он в точности соответствовал альфа-каналу вставляемого спрайта?

Делал примерно так:

from PIL import Image
img = Image.new('RGBA', (100, 100))
sprite1 = Image.open('sprite1.png')
sprite2 = Image.open('sprite2.png')
img.paste( sprite1, (0, 10) )
img.paste( sprite2, (0, 15) ) # альфа-канал затирает рисунок
img.alpha_composite( sprite2, (0, 20) ) # альфа-канал сохраняет рисунок
img.alpha_composite( sprite2, (0, -10) ) # ошибка

P.S. Если создать mask = Image.new('RGBA', img.size), вставить в него спрайт mask.paste( sprite, xy ) и вставлять с этой маской img.paste( sprite, xy, mask=mask ), спрайт вставляется ПОД существующее изображение.

Ответ:

img.paste( sprite, xy, mask=sprite )
Но проверять нужно на правильно нарисованых изображениях с правильно нарисоваными альфа-каналами.

★★★★★

Последнее исправление: question4 (всего исправлений: 2)

Создать картинку побольше и обрезать

Что мешает сначала .paste, а потом .alpha_composite с теми же координатами?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.