简体   繁体   English

Python:如何在PIL.ImageGrab中获取屏幕截图数据?

[英]Python:How can I get screenshot data in PIL.ImageGrab?

I can grab a screenshot through ImageGrab.grab() in PIL,it returns an instance,but as we know,we can't send or recv an instance via socket.How to get the binary data of screenshot? 我可以通过PIL中的ImageGrab.grab()抓取一个屏幕快照,它返回一个实例,但是众所周知,我们无法通过套接字发送或接收实例。如何获取屏幕快照的二进制数据?

if I use save method at first,then use open(file,'wb') then I can get the binary data,but it will cost a lot of disk resources if I grab 24 pictures per second.How can I get binary data directly instead of use save and open? 如果首先使用save方法,然后使用open(file,'wb'),则可以获取二进制数据,但是如果每秒抓取24张图片,则将花费大量磁盘资源。如何直接获取二进制数据而不是使用保存并打开?

while True:
    screen=ImageGrab.grab()
    screen.save('c:\\1.jpeg','jpeg')
    f=open('c:\\1.jpeg','wb')
    data=f.read()
    f.close()
    sock.sendto(data,addr)

You can eg serialize the image into a StringIO (in-memory file) like 您可以例如将图像序列化为StringIO (内存文件),例如

mem_file = cStringIO.StringIO()
screen.save(mem_file, 'jpeg')
data = mem_file.getvalue()

.. and later open it like: ..然后像这样打开它:

my_img = PIL.Image.open(cStringIO.StringIO(data))

Or use low-level functions like screen.tostring() / .fromstring() - plus transfer the geometry/mode extra. 或使用诸如screen.tostring() / .fromstring()类的底层函数- .fromstring()额外转移几何/模式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM