如何使用 pygame 在 Python 中保持 png 图像的透明度? [复制]
Posted
技术标签:
【中文标题】如何使用 pygame 在 Python 中保持 png 图像的透明度? [复制]【英文标题】:How can to keep the transparancy of a png image in Python using pygame? [duplicate] 【发布时间】:2021-07-04 15:17:59 【问题描述】:我已经在这个问题上苦苦挣扎了很长一段时间,因为我想在 Python 和 pygame 中使用 png 图像时保持透明背景。如果我使用下面的代码,透明背景会变成黑色。屏幕截图如下所示。请注意,我希望能够在加载后修改图像的颜色,这就是我使用image.putpixel
函数的原因。
import pygame
from PIL import Image
def pilImageToSurface(pilImage):
return pygame.image.fromstring(pilImage.tobytes(), pilImage.size, pilImage.mode).convert()
image = Image.open('creature1.png')
image.putpixel((10,10), (256,0,0))
pygame.init()
screen = pygame.display.set_mode([100, 100])
screen.fill([10, 100, 10])
done = False
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
pygameSurface = pilImageToSurface(image)
screen.blit(pygameSurface, pygameSurface.get_rect(center = (50,50)))
pygame.display.flip()
pygame.quit()
【问题讨论】:
【参考方案1】:您必须使用convert_alpha()
而不是convert()
:
return pygame.image.fromstring(pilImage.tobytes(), pilImage.size, pilImage.mode).convert()
return pygame.image.fromstring(pilImage.tobytes(), pilImage.size, pilImage.mode).convert_alpha()
见pygame.image
:
返回的 Surface 将包含与其来源文件相同的颜色格式、颜色键和 alpha 透明度。您经常需要不带参数地调用
convert()
,以创建一个可以更快地在屏幕上绘制的副本。 对于 alpha 透明度,如在 .png 图像中,在加载后使用convert_alpha()
方法,以便图像具有每像素透明度。
此外,没有必要使用 PLI。请改用pygame.image.load
:
pygameSurface = pygame.image.load('creature1.png').convert_alpha()
pygameSurface.set_at((10, 10), (255, 0, 0))
【讨论】:
以上是关于如何使用 pygame 在 Python 中保持 png 图像的透明度? [复制]的主要内容,如果未能解决你的问题,请参考以下文章