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")
Вопрос в том, как сделать то же самое в памяти?
Ответы
Ответ 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, чтобы изображение могло получить доступ к вашим данным, как если бы это был файл.