使用 GIMP 和 Pygame 使 alpha 混合正常工作时出现问题

问题描述 投票:0回答:1

使用这个问题作为参考,我试图显示一个图像,其中图像中的一种颜色是 Alpha 通道: PyGame:使用 alpha 对图像应用透明度?

我的源图像是一个单层 PNG 文件,我希望不绘制黑色 (0, 0, 0) 像素。大多数时候,我只是在使用

set_alpha()
命令后整个图像逐渐淡出。之前的答案表明这可能是 GIMP 问题。如果我使用 GIMP 并将黑色设置为透明度颜色并按照指示导出设置为索引颜色模式的文件,我最终会在正确的位置获得透明像素,但是,现在调色板不正确(绿色像素现在是紫色) , ETC。)。如果我使用 RGB 颜色模式从 GIMP 导出,那么颜色是正确的,但黑色像素仍然由 Pygame 绘制,即使在 GIMP 中它们不是这样。

之前的答案也有一个回复,建议您可以通过将一个图像打印在另一个图像之上来有效地创建选择用作绿屏索引的像素颜色的所需效果:

import pygame
pygame.init()
window = pygame.display.set_mode((200, 200))
image = pygame.image.load('alpha.png')
surface = pygame.Surface(image.get_size(), depth=24)
key = (0,255,0)
surface.fill(surface.get_rect(), key)
surface.set_colorkey(key)
surface.blit(image, (0,0))
surface.set_alpha(128) 
window.fill((255,255,255))
window.blit(surface, (0,0))
pygame.display.flip()

但是,如果我尝试这种方法,那么在执行

ValueError: invalid rectstyle object
时我会得到
surface.fill(surface.get_rect(), key)
,所以也许这些步骤在当前版本的 Pygame 中不再有效?如果有人可以提供一系列更新的正确保存 GIMP 文件并将其加载到 Pygame 中的步骤,我们将不胜感激。

python pygame pygame-surface alpha-transparency
1个回答
0
投票

好吧,经过一些猜测,我找到了一些可行的方法。从尚未保存 Alpha 通道的 PNG 文件开始,并使用 GIMP 2.10.36:

  • 确保通过图像->模式->RGB 将颜色模式设置为 RGB。
  • 选择图层->透明度->颜色到Alpha,然后选择黑色(在我的例子中是#000000)。在 GIMP 中,所有黑色像素立即消失。
  • 将文件导出为 PNG,确保选中“保存背景颜色”框(我不是默认情况下)。
  • 在 Pygame 中,执行
    pygame.image.load("my_image.png").convert_alpha()

图像现在根据图像的

set_alpha()
设置进行了正确的混合。

© www.soinside.com 2019 - 2024. All rights reserved.