Подтвердить что ты не робот

Python Imaging: загрузка jpeg из памяти

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

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

jpgdata = self.rfile.read(sz)

и я знаю, что это jpeg-кодированное изображение.

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

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

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

4b9b3361

Ответ 1

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

from cStringIO import StringIO
file_jpgdata = StringIO(jpgdata)
dt = Image.open(file_jpgdata)

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

Ответ 2

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