2011-12-17 59 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