Как вернуть изображение PIL в памяти из приложения WSGI

Я прочитал много сообщений, таких как этот эта деталь, как динамически возвращать изображение с помощью 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 ответов


Посмотреть Изображения.спасать.)( Он может взять объект file, и в этом случае вы можете записать его в экземпляр StringIO. Таким образом что-то вроде:

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

вам нужно будет проверить, какие значения вы можете использовать для формата.