2011-12-17 62 views
4

我想使用PIL創建圖像,並且能夠通過電子郵件發送圖像而不必將其保存到磁盤。將PIL圖像轉換爲MIMEImage

這是什麼工作,而是涉及到保存到磁盤:

from email.mime.image import MIMEImage 
from email.mime.multipart import MIMEMultipart 

msg = MIMEMultipart() 

im = Image.new("RGB", (200, 200)) 

with open("tempimg.jpg", "w") as f: 
    im.save(f, "JPEG") 

with open("tempimg.jpg", 'rb') as f: 
    img = MIMEImage(f.read()) 

msg.attach(img) 

現在我希望能夠做這樣的事情:

import StringIO 

tempimg = StringIO.StringIO() 
tempimg.write(im.tostring()) 
img = MIMEImage(tempimage.getvalue(), "JPG") 
msg.attach(img) 

,這是行不通的。我發現一些discussion in Spanish,看起來像它解決相同的問題,沒有解決方案,除了在StringIO指針。

回答

7

im.tostring回到原始圖像數據,但你需要整個圖像文件的數據傳遞給MIMEImage,所以使用StringIO模塊將圖像保存到內存,並使用這些數據:

from email.mime.image import MIMEImage 
from email.mime.multipart import MIMEMultipart 
from PIL import Image 
import cStringIO 

msg = MIMEMultipart() 

im = Image.new("RGB", (200, 200)) 
memf = cStringIO.StringIO() 
im.save(memf, "JPEG") 
img = MIMEImage(memf.getvalue()) 

msg.attach(img) 
+0

謝謝,這作品!我已經用Im.save()嘗試了一些東西,但是我猜測這些論據很混亂。 – user1103852 2011-12-18 13:24:09