В Python, как я могу открыть PIL или Imagemagick Image в виде файла

1

Я беру загруженные файлы, которые я могу сохранить на S3, используя SimpleS3:

from simples3.bucket import S3Bucket
upload = request.POST['image']
s = S3Bucket("cdn", s3.access_key, s3.secret_key)
s.put(upload.filename, upload.file.read())

Где-то между сохранением этого файла и его загрузкой я сохраняю файл, который является изображением в виде миниатюры, используя PIL или Imagemagick в зависимости от того, какой файл изображения был загружен. Процесс заключается в том, чтобы превратить файл в изображение. Мой вопрос заключается в том, как открыть это изображение в виде файла? Я пытаюсь загрузить миниатюру в Amazon S3 точно так же, как и выше. Мой код ниже - это идея того, что я пытаюсь сделать:

thumb = self._im.copy() #where _im is the Image
s = S3Bucket("cdn", s3.access_key, s3.secret_key)
s.put(self.filename+ext, thumb)

Я пробовал без успеха:

f = open(thumb, "rb")
s.put(self.filename+ext, f.read()

Что работает, но невероятно неэффективно, записывает файл на диск с помощью функции Image.save, а затем открывает его как файл:

thumb.save(self.filename+ext)
f = open(self.filename+ext, 'r')
s.put(self.filename+ext, f.read())
  • 0
    Разобрался: из StringIO импорт StringIO f = StringIO () thumb.save (f, ext) s.put (self.filename + ext, f.getvalue ())
  • 0
    Хорошей идеей будет опубликовать это как ответ и пометить его правильно, если кто-то еще столкнется с той же проблемой.
Показать ещё 2 комментария
Теги:
amazon-s3
file-io
imagemagick
python-imaging-library

2 ответа

4
Лучший ответ

Выяснилось:

from StringIO import StringIO
f = StringIO() 
thumb.save(f, ext) 
s.put(self.filename+ext, f.getvalue())
0

Для случая ImageMagick, если вы используете PythonMagick, вы можете использовать базовый класс Blob,

>>> from PythonMagick import Image, Blob
>>> image = Image("images/test_image.miff")
>>> image.magick("PNG")
>>> blob = Blob()
>>> image.write(blob)
>>> len(blob.data)
28282
>>> blob.data[0:20]
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x94'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню