В Python, как я могу открыть PIL или Imagemagick Image в виде файла - PullRequest
2 голосов
/ 09 мая 2011

Я беру загруженные файлы, которые могу сохранить в 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())

Ответы [ 2 ]

4 голосов
/ 10 мая 2011

Разобрался:

from StringIO import StringIO
f = StringIO() 
thumb.save(f, ext) 
s.put(self.filename+ext, f.getvalue())
0 голосов
/ 10 мая 2011

В случае 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'
...