Python 使用不正确的文件扩展名将图像读入pygame

Python 使用不正确的文件扩展名将图像读入pygame,python,image,pygame,Python,Image,Pygame,我想把一个JPS文件加载到pygame中。JPS文件只是一个jpeg文件,其图像由两个并排的立体图片组成。如果我将扩展名改为jpg并使用pygame.image.load(文件名),Pigame将加载该文件,但我要做的是将该文件加载到内存中,然后告诉Pigame从缓冲区加载该文件,并且该缓冲区包含一个jpeg文件 我想这样做,因为稍后我想扩展一些东西,以便可以加载一个MPO文件,该文件包含两个jpeg文件,我怀疑会涉及相同的技术 我尝试了pygame.image.frombuffer和pygam

我想把一个JPS文件加载到pygame中。JPS文件只是一个jpeg文件,其图像由两个并排的立体图片组成。如果我将扩展名改为jpg并使用pygame.image.load(文件名),Pigame将加载该文件,但我要做的是将该文件加载到内存中,然后告诉Pigame从缓冲区加载该文件,并且该缓冲区包含一个jpeg文件

我想这样做,因为稍后我想扩展一些东西,以便可以加载一个MPO文件,该文件包含两个jpeg文件,我怀疑会涉及相同的技术

我尝试了pygame.image.frombuffer和pygame.image.fromstring,但得到的错误消息是“字符串长度不等于格式和分辨率大小”。我想这是因为我没有告诉它缓冲区包含jpeg


任何人都知道如何做到这一点吗?

也许是以下几点(未经测试):

既然你说它可以工作,你可能会缩短事情如下所示,因为没有理由给图像缓冲区一个名称,并保持它在周围:

with open('image.jps', 'rb') as imgfile:
    image1 = pygame.image.load(StringIO(imgfile.read()))

由于
pygame.image.load()
将接受文件名或类似Python文件的对象,因此您可以首先将JPS文件读入
StringIO
实例,然后将其传递给它。这是什么意思?imagebuf=StringIO(文件名)image1=pygame.image.load(imagebuf)提供了不受支持的图像格式,很好听-不客气。顺便说一句,要处理MPO文件,您可能必须将每个jpeg提取到一个单独的
StringIO
实例中,因为pygame本身不知道如何处理。谢谢-是的,我今天已经破坏了它的背面,我正在读取并显示MPO文件中的两个图像。然而,我必须读两次文件才能得到这两个实例。如果不增加“问题蠕变”,有没有办法只看一次?再次感谢您的帮助。在我的回答中,
imgfile.read()
将整个文件读取到内存中,并将读取的数据作为字符串返回,然后用于创建单个
StringIO
实例。通过在返回的字符串上使用切片表示法,然后从每个切片中创建一个单独的
StringIO
实例,您可以从中创建多个实例—假设您知道每个嵌入图像的起始和结束字节偏移量。i、 e.
image1=pygame.image.load(StringIO(imgbuf[start1:end1+1])
image2=pygame.image.load(StringIO(imgbuf[start2:end2+1])
)等。
with open('image.jps', 'rb') as imgfile:
    image1 = pygame.image.load(StringIO(imgfile.read()))