如何在 Pygame 中制作具有透明背景的图像?
How can I make an Image with a transparent Backround in Pygame?
我对编程还很陌生,所以我买了 Eric Matthes 的书“Python 速成课程”。最近,我决定在 Pygame 重新创建口袋妖怪对战系统。至此,我已经做了一个足够好的框架来启动战斗系统。我选择了 Pokemon Mew 作为测试对象。我已经有了图片的透明背景,但 pygame 仍然显示灰色和白色方块。这是我的主要代码文件:
from settings import Settings
def run_game():
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode(
(ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Pykemon Battle Simulator")
pokemon = Mew(screen)
mixer.music.load("battle_music.mp3")
mixer.music.play(-1)
while True:
screen.fill(ai_settings.bg_color)
pokemon.blitme()
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.display.flip()
run_game()
这是我的 Mew 设置文件:
import pygame
class Mew():
def __init__(self, screen):
"""Initialize the Pokémon Mew and it's location """
self.screen = screen
#Load the pokemon and get it's rect.
self.image = image = pygame.image.load("mew.jpg").convert_alpha()
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#Start each new Pokemon at the bottom of the screen
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self):
"""Draw the pokemon's current location"""
self.screen.blit(self.image, self.rect)
结果就是这样(https://imgur.com/a/OytJBUN)。如何让图片背景透明?
问题是图像格式。 JPEG images have no alpha channel. You can set a transparent colorkey by set_colorkey()
,但是结果不会让你满意,因为JPEG不是无损的。这意味着由于压缩,颜色会略有变化,颜色键将无法正常工作。比如白色:
self.image = image = pygame.image.load("mew.jpg")
self.image.set_colorkey((255, 255, 255))
使用 set_colorkey()
和无损图像格式,如 BMP:
self.image = image = pygame.image.load("mew.bmp")
self.image.set_colorkey((255, 255, 255))
或者我们 PNG
格式。例如:
image = pygame.image.load("mew.png").convert_alpha()
使用带有 convert_alpha() 函数的 PNG:
image = pygame.image.load("image.png").convert_alpha()
我对编程还很陌生,所以我买了 Eric Matthes 的书“Python 速成课程”。最近,我决定在 Pygame 重新创建口袋妖怪对战系统。至此,我已经做了一个足够好的框架来启动战斗系统。我选择了 Pokemon Mew 作为测试对象。我已经有了图片的透明背景,但 pygame 仍然显示灰色和白色方块。这是我的主要代码文件:
from settings import Settings
def run_game():
pygame.init()
ai_settings = Settings()
screen = pygame.display.set_mode(
(ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Pykemon Battle Simulator")
pokemon = Mew(screen)
mixer.music.load("battle_music.mp3")
mixer.music.play(-1)
while True:
screen.fill(ai_settings.bg_color)
pokemon.blitme()
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.display.flip()
run_game()
这是我的 Mew 设置文件:
import pygame
class Mew():
def __init__(self, screen):
"""Initialize the Pokémon Mew and it's location """
self.screen = screen
#Load the pokemon and get it's rect.
self.image = image = pygame.image.load("mew.jpg").convert_alpha()
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#Start each new Pokemon at the bottom of the screen
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self):
"""Draw the pokemon's current location"""
self.screen.blit(self.image, self.rect)
结果就是这样(https://imgur.com/a/OytJBUN)。如何让图片背景透明?
问题是图像格式。 JPEG images have no alpha channel. You can set a transparent colorkey by set_colorkey()
,但是结果不会让你满意,因为JPEG不是无损的。这意味着由于压缩,颜色会略有变化,颜色键将无法正常工作。比如白色:
self.image = image = pygame.image.load("mew.jpg")
self.image.set_colorkey((255, 255, 255))
使用 set_colorkey()
和无损图像格式,如 BMP:
self.image = image = pygame.image.load("mew.bmp")
self.image.set_colorkey((255, 255, 255))
或者我们 PNG
格式。例如:
image = pygame.image.load("mew.png").convert_alpha()
使用带有 convert_alpha() 函数的 PNG:
image = pygame.image.load("image.png").convert_alpha()