Как динамически реагировать на изображение PIL в Cherrypy (Python3)? - PullRequest
0 голосов
/ 08 июня 2018

Кажется, задача проста, но ...

У меня есть простой объект PIL.Image.Как сделать Cherrypy ответ с этим изображением динамически?

def get_image(self, data_id):
    cherrypy.response.headers['Content-Type'] = 'image/png'
    img = PIL.Image.frombytes(...)
    buffer = io.StringIO()
    img.save(buffer, 'PNG')
    return buffer.getvalue()

Этот код дает мне:

500 Internal Server Error
The server encountered an unexpected condition which prevented it from fulfilling the request.

Traceback (most recent call last):
  File "C:\Users\Serge\AppData\Local\Programs\Python\Python36\lib\site-packages\cherrypy\_cprequest.py", line 631, in respond
    self._do_respond(path_info)
  File "C:\Users\Serge\AppData\Local\Programs\Python\Python36\lib\site-packages\cherrypy\_cprequest.py", line 690, in _do_respond
    response.body = self.handler()
  File "C:\Users\Serge\AppData\Local\Programs\Python\Python36\lib\site-packages\cherrypy\_cpdispatch.py", line 60, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "D:\Dev\Bf\webapp\controllers\calculation.py", line 69, in get_image
    img.save(buffer, 'PNG')
  File "C:\Users\Serge\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\Image.py", line 1930, in save
    save_handler(self, fp, filename)
  File "C:\Users\Serge\AppData\Local\Programs\Python\Python36\lib\site-packages\PIL\PngImagePlugin.py", line 731, in _save
    fp.write(_MAGIC)
TypeError: string argument expected, got 'bytes'

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 09 июня 2018

Используйте io.BytesIO() вместо io.StringIO().(С это ответ.)

...