如何在Pygame中无背景的背景图像

时间:2020-08-10 05:11:50

标签: python python-3.x pygame

enter image description here

我只想在pygame的表面上只淡化此图像的绿色三角形。

我的代码:

import pygame

win = pygame.display.set_mode((800,800))
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    win.fill((255,255,255))
    Image = pygame.image.load('sample.jpg').convert()
    Image.set_colorkey((0,0,0))
    win.blit(Image,(80,80))
    pygame.display.update()

pygame.quit()

enter image description here

当我运行该代码时,它会像这样使图像变暗。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果您将原始三角形位图加载到The GIMP之类的图形编辑器中,则在出现问题的三角形周围区域中选择颜色表明这些颜色并非完全是黑色,而是非常深的灰色,例如( 0, 0, 3 )。这可能是因为该图像另存为JPEG,其中存储的是非像素完美的图像,并且颜色已损坏。

尝试此重新绘制的图像-.PNG-确实具有像素完美的压缩:

sample.png

sample.tri

但是,如果您要麻烦的话,还可以通过alpha通道使不需要的部分透明,那么PyGame将自动隐藏背景。

答案 1 :(得分:1)

不幸的是,pygame在色彩过滤方面做得不好。取而代之的是,您可以尝试对内置有Alpha透明效果的png图像进行模糊处理,并可以使用GIMP或photoshop等工具制作透明图像。 但是,如果您有很多图像并且想要自动执行该过程,则可以使用opencv无缝过滤颜色;这是一个很好的教程:

https://realpython.com/python-opencv-color-spaces/

在过滤了指定的颜色之后,您还可以使用形态学运算以获得更好的结果: https://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html