我以前使用Python 2.7
和pygame
,并且要将PNG和blit
加载到曲面,此代码就足够了:
sprites = pygame.image.load('sprites.png')
background.blit(sprites, (0, 0), rect)
现在我正在使用Python 3
,这意味着我需要加载PIL
来处理PNG文件。我的新代码如下所示:
from PIL import Image
sprites = Image.open('sprites.png')
background.blit(sprites, (0, 0), rect)
但是当我运行新代码时,我在最后一行得到了这个错误:
TypeError:参数1必须是pygame.Surface,而不是PngImageFile
因此sprites
变量是PngImageFile
而background.blit()
期待pygame.Surface
个对象作为输入:
PngImageFile
转换为pygame.Surface
吗?我找不到任何办法。blit
PIL图像发送到pygame.Surface
个对象?我一直在努力寻找StackOverflow上的答案,所以我很确定这不是一个重复的问题。任何意见或建议都会非常受欢迎。
答案 0 :(得分:1)
from PIL import Image
sprites = Image.open('sprites.png')
pygameImage = pygame.image.fromstring(str(buffer(sprites)), win.size, 'RGB', False)
background.blit(pygameImage, (0, 0), rect)
由于我在PIL上运行Python3而没有任何运气,我不能完全确定这是开箱即用的。因为您需要获取sprites
对象的文本表示而不是数据数组。
以下内容可能会帮助您将PIL对象转换为字符串吗?
或者只是尝试:
from PIL import Image
sprites = pygame.image.load(Image.open('sprites.png'))
background.blit(sprites, (0, 0), rect)