2016-07-28 62 views
3

我有兩個圖像,一個背景和一個透明像素的PNG圖像。我試圖使用Python-PIL將PNG粘貼到背景上,但是當我粘貼兩個圖像時,我會在具有透明像素的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上的透明圖像,你只需要根據圖像尺寸計算正確的偏移量:

text_img.paste(bg, ((text_img.width - bg.width)/2, (text_img.height - bg.height)/2)) 
text_img.paste(ironman, ((text_img.width - ironman.width)/2, (text_img.height - ironman.height)/2), mask=ironman) 
+0

非常感謝你的工作,但是當我試圖從互聯網網址的圖像做同樣的事情時,我得到了錯誤'透明度不好的面具'你能告訴我原因嗎? – pavitran

+0

它可能取決於圖像,你可以給我一個圖像的鏈接?你也可以嘗試'mask = ironman.split()[3]' –

+0

函數'.split()[3]'在這裏做什麼? – pavitran

相關問題