无需保存即可获取 PIL 图像的二进制表示

Wah*_*vic 7 python sockets node.js python-imaging-library

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

window = img.crop((x,y,width+x,height+y))
window = window.resize((48,48),Image.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)

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

window.save("window.jpg")
infile = open("window.jpg","rb")
encodedWindow = base64.b64encode(infile.read())
#Then send encodedWindow 
Run Code Online (Sandbox Code Playgroud)

不过,这是一个巨大的开销,因为我首先将图像保存到硬盘,然后再次加载以获得二进制格式。这导致我的应用程序非常慢。我阅读了 PIL Image 的文档,但发现没有任何有用的东西。

sws*_*phe 4

根据文档(位于 effbot.org):

“您可以使用文件对象代替文件名。在这种情况下,您必须始终指定格式。文件对象必须实现eek、tell和write方法,并以二进制模式打开。”

这意味着您可以传递 StringIO 对象。写入它并获取大小,而无需访问磁盘。

像这样:

s = StringIO.StringIO()
window.save(s, "jpg")
encodedWindow = base64.b64encode(s.getvalue())
Run Code Online (Sandbox Code Playgroud)