获取PIL图像的二进制表示而不保存

我正在编写一个集中使用图像的应用程序。 它由两部分组成。 客户端部分是用Python编写的。 它对图像进行一些预处理,并通过TCP将其发送到Node.js服务器。 预处理后,Image对象如下所示:

window = img.crop((x,y,width+x,height+y)) window = window.resize((48,48),Image.ANTIALIAS) 

要发送套接字,我必须以二进制格式。 我现在正在做的是:

 window.save("window.jpg") infile = open("window.jpg","rb") encodedWindow = base64.b64encode(infile.read()) #Then send encodedWindow 

但是,这是一个巨大的开销,因为我将图像保存到硬盘上,然后再次加载以获取二进制格式。 这导致我的申请速度非常慢。 我读了PIL Image的文档,但没有发现任何有用的东西。

根据文件,(在effbot.org):

“您可以使用文件对象而不是文件名,在这种情况下,您必须始终指定格式,文件对象必须执行seek,tell和write方法,并以二进制模式打开。

这意味着你可以传递一个StringIO对象。 写入它,并获得大小,而不会击中磁盘。

喜欢这个:

 s = StringIO.StringIO() window.save(s, "jpg") encodedWindow = base64.b64encode(s.getvalue())