在python中,我如何将PIL或Imagemagick图像作为文件打开

时间:2011-05-08 22:56:29

标签: python file-io amazon-s3 imagemagick python-imaging-library

我正在上传文件,我可以使用SimpleS3保存到S3:

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将文件作为缩略图保存,具体取决于上传的图像文件类型。该过程将文件转换为图像。我的问题是如何将该图像作为文件打开?我正在尝试将缩略图上传到亚马逊的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 个答案:

答案 0 :(得分:4)

想出来:

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

答案 1 :(得分: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'