将PIL图像转换为MIMEImage

时间:2011-12-17 20:11:37

标签: python email python-imaging-library

我想使用PIL创建一个图像,并且无需将其保存到磁盘即可通过电子邮件发送。

这是有效的,但涉及保存到磁盘:

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上的指针外没有任何解决方案。

1 个答案:

答案 0 :(得分: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)