2016-07-28 4 views
3

У меня есть два изображения, фон и изображение PNG с прозрачными пикселями. Я пытаюсь вставить PNG на фон с помощью Python-PIL, но когда я вставляю два изображения, я получаю белые пиксели вокруг изображения PNG, где есть прозрачные пиксели.Как вставить изображение PNG с прозрачностью в другое изображение в PIL без белых пикселей?

Мой код:

import os 
from PIL import Image, ImageDraw, ImageFont 

filename='pikachu.png' 
ironman = Image.open(filename, 'r') 
filename1='bg.png' 
bg = Image.open(filename1, 'r') 
text_img = Image.new('RGBA', (600,320), (0, 0, 0, 0)) 
text_img.paste(bg, (0,0)) 
text_img.paste(ironman, (0,0)) 
text_img.save("ball.png", format="png") 

Мои изображения:
enter image description hereenter image description here

мой вывод изображения:
enter image description here

Как я могу иметь прозрачные пиксели, а не белый?

ответ

8

Вам просто нужно указать изображение маски следующим образом в функции вставки:

import os 
from PIL import Image, ImageDraw, ImageFont 

filename='pikachu.png' 
ironman = Image.open(filename, 'r') 
filename1='bg.png' 
bg = Image.open(filename1, 'r') 
text_img = Image.new('RGBA', (600,320), (0, 0, 0, 0)) 
text_img.paste(bg, (0,0)) 
text_img.paste(ironman, (0,0), mask=ironman) 
text_img.save("ball.png", format="png") 

Давать вам:

paste with transparency


Для центрирования как фоновое изображение и прозрачного изображения на новом text_img, вам просто нужно вычислить правильные смещения на основе размеров изображений:

+0

спасибо, что это работает, но когда я попытался сделать то же самое с изображением с интернет-URL, я получил ошибку «bad mask mask», можете ли вы сказать мне причину этого? – pavitran

+0

Возможно, это зависит от изображения, можете ли вы дать мне ссылку на изображение? Вы также можете попробовать 'mask = ironman.split() [3]' –

+0

что делает функция '.split() [3]' здесь? – pavitran

Смежные вопросы