Как объединить прозрачное изображение png с другим изображением с помощью PIL
У меня есть прозрачное изображение png " foo.формат PNG"
и я открыл еще одно изображение с
im = Image.open("foo2.png");
теперь мне нужно объединить foo.png с foo2.формат PNG.
( foo.png содержит некоторый текст, и я хочу напечатать этот текст на foo2.png)
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не работает должным образом, когда источник и назначение оба содержат альфа.рассмотрим следующий сценарий:
два тестовых изображения, оба содержат альфа:
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-го слоя. Пиксели не смешиваются правильно):
композитинг изображения с помощью
Image.alpha_compositeвот так:final2 = Image.new("RGBA", layer1.size) final2 = Image.alpha_composite(final2, layer1) final2 = Image.alpha_composite(final2, layer2)создает следующее (правильное) изображение:
можно также использовать для смешивания:
im1 = Image.open("im1.png") im2 = Image.open("im2.png") blended = Image.blend(im1, im2, alpha=0.5) blended.save("blended.png")




Comments