如何解决此错误:TypeError:参数1必须是pygame.Surface,而不是PngImageFile

时间:2014-02-20 13:34:44

标签: python python-3.x pygame python-imaging-library image-conversion

我以前使用Python 2.7pygame,并且要将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变量是PngImageFilebackground.blit()期待pygame.Surface个对象作为输入:

  • 我应该将PngImageFile转换为pygame.Surface吗?我找不到任何办法。
  • 是否有更好的方式将blit PIL图像发送到pygame.Surface个对象?

我一直在努力寻找StackOverflow上的答案,所以我很确定这不是一个重复的问题。任何意见或建议都会非常受欢迎。

1 个答案:

答案 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)