Как объединить прозрачное изображение png с другим изображением с помощью PIL



У меня есть прозрачное изображение png " foo.формат PNG"
и я открыл еще одно изображение с



im = Image.open("foo2.png");


теперь мне нужно объединить foo.png с foo2.формат PNG.



( foo.png содержит некоторый текст, и я хочу напечатать этот текст на foo2.png)

720   4  

4 ответов:

import Image

background = Image.open("test1.png")
foreground = Image.open("test2.png")

background.paste(foreground, (0, 0), foreground)
background.show()

первый параметр .paste() изображение для вставки. Во-вторых, это координаты, а секретный соус-это третий параметр. Это указывает на маска, который будет использоваться для вставки изображения. Если вы передаете изображение с прозрачностью, то альфа-канал используется в качестве маски.

Регистрация docs.

Image.paste не работает должным образом, когда фоновое изображение также содержит прозрачность. Вы должны использовать real Альфа-Композитинг.

подушка 2.0 содержит alpha_composite функция, которая делает это.

background = Image.open("test1.png")
foreground = Image.open("test2.png")

Image.alpha_composite(background, foreground).save("test3.png")

EDIT: оба изображения должны быть типа RGBA. Так что вам нужно позвонить convert('RGBA') если они paletted, то etc.. Если фон не имеет Альфа-канала, то вы можете использовать обычный метод вставки (который должен быть быстрее).

как olt уже отмечали, Image.paste не работает должным образом, когда источник и назначение оба содержат альфа.

рассмотрим следующий сценарий:

два тестовых изображения, оба содержат альфа:

enter image description here enter image description here

layer1 = Image.open("layer1.png")
layer2 = Image.open("layer2.png")

композитинг изображения с помощью Image.paste вот так:

final1 = Image.new("RGBA", layer1.size)
final1.paste(layer1, (0,0), layer1)
final1.paste(layer2, (0,0), layer2)

создает следующее изображение (Альфа-часть наложенного красного пиксели полностью взяты из 2-го слоя. Пиксели не смешиваются правильно):

enter image description here

композитинг изображения с помощью Image.alpha_composite вот так:

final2 = Image.new("RGBA", layer1.size)
final2 = Image.alpha_composite(final2, layer1)
final2 = Image.alpha_composite(final2, layer2)

создает следующее (правильное) изображение:

enter image description here

можно также использовать для смешивания:

im1 = Image.open("im1.png")
im2 = Image.open("im2.png")
blended = Image.blend(im1, im2, alpha=0.5)
blended.save("blended.png")

Comments

    Ничего не найдено.