选择特定显示屏截屏的python实现

多屏幕截屏

逻辑

截屏的实现逻辑本次不予赘述,此次只谈论如何获取多个屏幕的 rect。
Desktopmagic 库对于获取多屏幕信息的实现如下:

main.py

from desktopmagic.screengrab_win32 import (getDisplayRects, getRectAsImage)

# 获取所有显示屏信息
screens = getDisplayRects()
# 类似与 PIL.ImageGrab.grab 操作
rect = getRectAsImage(screens[0])
rect.save('D:\\desktop\\pythonProject1\\leftscr_0.jpeg', format='jpeg')

对于 getDisplayRects 函数,Desktopmagic 的逻辑是,调用了 EnumDisplayMonitors 该方案的 python 封装在 PyEnumDisplayMonitors。需要注意的是, getDisplayRects 函数内部会对 PyEnumDisplayMonitors 的结果进行"裁剪",最终只会返回 每个屏幕的rect。

拿到每个屏幕的rect 就可以通过 PIL.ImageGrab 类似函数进行截屏。

代码

from desktopmagic.screengrab_win32 \
    import (getDisplayRects, getRectAsImage)

from PIL import ImageGrab
import time

startTime = time.time_ns()
# getDisplayRects 函数会拿到当前所有显示器的rect [left_x, left_y, right_x, right_y]
# screens 是一个列表, 每一个元素都代表着一个显示器的 rect
screens = getDisplayRects()
# print(len(screens))
# for item in screens:
#     print(item)

# imageGrab.grab 方法需要指定 all_screens 参数, 才能在 screens.rect 为负数的情况下正确截屏
image = ImageGrab.grab(bbox=screens[0], all_screens=True)
image.save("D:\\desktop\\pythonProject1\\ImageGrab_0.JPEG", format="JPEG")
endTime = time.time_ns()
print((endTime-startTime) / 1e9)

# image = ImageGrab.grab(bbox=screens[1], all_screens=True)
# image.save("D:\\desktop\\pythonProject1\\ImageGrab_1.JPEG", format="JPEG")

rect = getRectAsImage(screens[0])
rect.save('D:\\desktop\\pythonProject1\\leftscr_0.jpeg', format='jpeg')
endTime = time.time_ns()
print((endTime-startTime) / 1e9)
# rect = getRectAsImage(screens[1])
# rect.save('D:\\desktop\\pythonProject1\\leftscr_1.png', format='png')

参考文章

ImageGrab.grab

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值