如何从WSGI应用程序返回内存中的PIL映像

ang*_*rpy 6 mod-wsgi python-imaging-library

我读过很多类似的帖子的这一个,详细说明了如何使用WSGI动态返回图像.但是,我看到的所有示例都是以二进制格式打开图像,读取它然后返回该数据(这对我很有用).

我一直试图使用内存中的PIL图像对象来实现相同的功能.我不想将图像保存到文件中,因为我已经在内存中保存了图像.

鉴于这种:

fd = open( aPath2Png, 'rb')
base = Image.open(fd)
... lots more image processing on base happens ...
Run Code Online (Sandbox Code Playgroud)

我试过这个:

data = base.tostring()
response_headers = [('Content-type', 'image/png'), ('Content-length', len(data))]
start_response(status, response_headers)
return [data]
Run Code Online (Sandbox Code Playgroud)

WSGI会将此返回给客户端.但是我会收到图片错误,说回来的图片有问题.

还有其他什么方法?

Gra*_*ton 11

请参见Image.save().它可以采用文件对象,在这种情况下,您可以将其写入StringIO实例.因此像:

output = StringIO.StringIO()
base.save(output, format='PNG')
return [output.getvalue()]
Run Code Online (Sandbox Code Playgroud)

您需要检查可用于格式的值.