有没有办法像打开的文件一样处理PIL图像?

时间:2019-04-21 18:52:15

标签: python python-imaging-library

我想将屏幕截图作为打开的文件来处理,更具体地说,它必须具有属性.read()

我正在使用PIL的ImageGrab.grab()截取屏幕快照,这给了我一个图像对象,该对象显然没有.read()属性。我知道我可以保存图像并使用open("image.png", "rb")重新打开它,但是我想知道是否有一种简便的方法可以不必在过程中保存图像。

我想借助smtplib将图像添加到电子邮件中。 通常,我会这样做:

filename='filename'
attachment  =open(filename,'rb')

part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= "+filename)

msg.attach(part)

但是在这种情况下,我想使用之前拍摄的屏幕截图。

2 个答案:

答案 0 :(得分:3)

您可以使用base64和BytesIO将其存储为缓冲图像。

import base64
from io import BytesIO

buffered_img = BytesIO()
image.save(buffered_img, format="JPEG")
img_str = base64.b64encode(buffered_img.getvalue())

然后使用img_str。

答案 1 :(得分:2)

是的,有。假设您要使用某种特定的,可能是压缩的标准图像文件格式的图像(而不是原始像素值),可以先将屏幕快照保存到TextView内存文件中,然后“倒回”为随后的RelativeLayout通话做准备。

遵循以下原则:

BytesIO