我想将屏幕截图作为打开的文件来处理,更具体地说,它必须具有属性.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)
但是在这种情况下,我想使用之前拍摄的屏幕截图。
答案 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