使用BytesIO将Pillow图片加载到PyGame时报不支持格式错误如何解决
问题修复方案
错误原因
你将PIL处理后的图片写入BytesIO对象后,数据流的文件指针会停在写入内容的末尾,此时pygame.image.load()从指针位置开始读取,无法获取到有效的图片数据,因此抛出「不支持的图片格式」错误。而写入本地文件再读取时,系统会自动从文件头部开始读取,所以不会触发问题。
修复方法
在写入BytesIO后调用seek(0)将文件指针重置到数据流起始位置即可,修改后代码如下:
from PIL import Image import io import pygame pilImage = Image.open('AgV6E.png') temp_io = io.BytesIO() pilImage.save(temp_io, format='PNG') # 重置文件指针到数据流开头 temp_io.seek(0) pygame.image.load(temp_io)
优化方案(可选)
你可以跳过PNG序列化/反序列化的步骤,直接将PIL图片转换为Pygame的Surface对象,性能更高:
from PIL import Image import pygame pilImage = Image.open('AgV6E.png').convert('RGBA') pygame_surface = pygame.image.frombuffer(pilImage.tobytes(), pilImage.size, pilImage.mode)
内容的提问来源于stack exchange,提问作者Flare
相关产品推荐
相关产品推荐

