如何用pygame显示PIL图像?

时间:2015-10-20 19:08:55

标签: python pygame python-imaging-library

我正试图通过wifi从我的覆盆子pi做一些视频流。我使用了pygame,因为我还必须在我的项目中使用游戏手柄。不幸的是我坚持显示收到的帧。简而言之:我得到jpeg框架,用PIL打开它,转换为字符串 - 之后我可以从字符串加载图像

image_stream = io.BytesIO()
...
frame_1 = Image.open(image_stream) 
f = StringIO.StringIO()
frame_1.save(f, "JPEG")
data = f.getvalue()
frame = pygame.image.fromstring(frame_1,image_len,"RGB")
screen.fill(white)
screen.blit(frame, (0,0))
pygame.display.flip()

,错误是:

Traceback (most recent call last):
  File "C:\Users\defau_000\Desktop\server.py", line 57, in <module>
    frame = pygame.image.fromstring(frame_1,image_len,"RGB")
TypeError: must be str, not instance

2 个答案:

答案 0 :(得分:2)

pygame.image.fromstring的第一个参数必须是str

因此当frame_1是您的PIL图片时,请将其转换为tostring的字符串,并使用pygame.image.fromstring加载此字符串。

您必须知道图像的大小才能使其正常工作。

raw_str = frame_1.tostring("raw", 'RGBA')
pygame_surface = pygame.image.fromstring(raw_str, size, 'RGBA')

答案 1 :(得分:0)

Sloth的答案对于较新版本的Pygame不正确。 tostring()定义已弃用。这是适用于Python 3.6,PIL 5.1.0,Pygame 1.9.3的有效变体:

raw_str = frame_1.tobytes("raw", 'RGBA')
pygame_surface = pygame.image.fromstring(raw_str, size, 'RGBA')