Python Imaging: загрузить JPEG из памяти - PullRequest
17 голосов
/ 11 января 2012

Проблема заключается в загрузке изображения в формате jpeg из памяти.

Я получаю строку из сокета:

jpgdata = self.rfile.read(sz)

и я знаю, что это изображение в формате JPEG.

Мне нужно его расшифровать. Самое глупое решение:

o = open("Output/1.jpg","wb")
o.write(jpgdata)
o.close()
dt = Image.open("Output/1.jpg")

Вопрос в том, как сделать то же самое в памяти?

Ответы [ 2 ]

25 голосов
/ 11 января 2012

Объект Image.open PIL принимает любой файлоподобный объект. Это означает, что вы можете обернуть данные изображения в объект StringIO и передать его в Image.Open

from io import BytesIO
file_jpgdata = BytesIO(jpgdata)
dt = Image.open(file_jpgdata)

Или попробуйте просто передать self.rfile в качестве аргумента Image.open - он может работать так же хорошо (То есть для Python 3 - для Python 2 используйте from cStringIO import StringIO as BytesIO)

0 голосов
/ 11 января 2012

Используйте StringIO, чтобы Image мог обращаться к вашим данным, как к файлу.

...