我想使用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上的指针外没有任何解决方案。
答案 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)