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

时间:2012-01-10 19:15:41

标签: mod-wsgi python-imaging-library

我已经阅读了许多帖子,例如this one,详细介绍了如何使用WSGI动态返回图像。但是,我看到的所有示例都是以二进制格式打开图像,读取它然后返回该数据(这对我很有用)。

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

鉴于此:

fd = open( aPath2Png, 'rb')
base = Image.open(fd)
... lots more image processing on base happens ...

我试过这个:

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

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

还有其他方法吗?

1 个答案:

答案 0 :(得分:11)

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

output = StringIO.StringIO()
base.save(output, format='PNG')
return [output.getvalue()]

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