如何使用 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 图像的透明度? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中安装Pygame

Pygame - 在保持单独功能的同时创建具有相同功能的多行

如何在pygame中等待一段时间?

如何为此特定代码在 Pygame 中模拟跳跃 [重复]

使用 Python 和 Pygame 模块构建一个游戏框架

如何在python中播放wav文件?