Как создать отбираемый файл из объекта изображения PIL, чтобы вы могли сохранить эти изображения в виде одного файла pickle, а затем, возможно, загрузить на другой компьютер, такой как сервер, на котором запущен PIL, и раскрыть его там?Pickleable Image Object
ответ
Вы можете преобразовать объект изображения в данные, то вы можете мариновать его:
image = {
'pixels': im.tostring(),
'size': im.size,
'mode': im.mode,
}
и обратно к изображению:
im = Image.fromstring(image['mode'], image['size'], image['pixels'])
Примечание: Как astex
упоминалось выше, если вы используя Pillow (который рекомендуется вместо PIL), метод tostring()
устарел для tobytes()
. Аналогично fromstring()
для frombytes()
.
Незначительное изменение ответа Джеральда с помощью ключевого слова арг
создать pickleable объект
image = {'data': im.tostring(), 'size':im.size, 'mode':im.mode}
или
image = dict(data=im.tostring(), size=im.size, mode=im.mode)
unpickle назад к изображению
im = Image.fromstring(**image)
Означает ли это, что мне не нужно хранить изображения в моем приложении? Я могу просто использовать строку, которую они сериализуют, и просто жестко кодировать ее внутри приложения, когда я хочу использовать изображение? – Ogen
Вы технически * можете * сделать это, но гораздо лучше сохранить его как фактический файл ... в любом случае его можно сопоставить с вашим кодом, но с сохранением изображений в виде изображений вы можете легко просмотреть их и узнать, что которые вы сохранили. Если вы храните изображения в виде кода, вы искусственно раздуваете размер ваших исходных файлов, делая их более обременительными для просмотра и поиска, а также сделать ваш медиа гораздо сложнее для управления, если вы хотите просмотреть и/или изменить это изображение. – kungphu
'Image.tostring() 'теперь устарел i n 'Pillow' в пользу' Image.tobytes() '. Для потомства может быть лучше изменить вышеизложенное (или, по крайней мере, оставить примечание). – astex