1

我正在上傳的文件,我可以保存到S3使用SimpleS3:在Python中,我將如何打開PIL或ImageMagick的圖像作爲文件

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()) 
+0

想通了: 從StringIO的進口StringIO的 F = StringIO的() thumb.save(F,分機) s.put(self.filename + ext,f.getvalue()) – jchysk 2011-05-08 23:22:55

+0

它是一個好主意,將其作爲答案發布,並在其他人遇到相同問題的情況下將其標記爲正確。 – 2011-05-09 03:48:44

+1

我必須在發帖後等待8小時 – jchysk 2011-05-09 06:56:04

回答

4

想通了:

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

對於ImageMagick的情況下,如果使用的是PythonMagick,則可以使用下面的斑點類,

>>> 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' 
相關問題