如何使用pygame保持python中png图像的透明性?

zaqlnxep  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(670)

这个问题在这里已经有答案了

如何将图像的背景色转换为与pygame窗口的颜色相匹配(1个答案)
pygame图像透明度混乱[重复](1个答案)
19天前关门了。
我已经为这个问题挣扎了很长一段时间,因为我想在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()

cotxawn7

cotxawn71#

你必须使用 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` :
返回的曲面将包含与它来自的文件相同的颜色格式、colorkey和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))

相关问题