python imagegrab_python – 有没有比PIL.ImageGrab.grab()有更好的方法来捕获屏幕?

PIL.ImageGrab有很多替代品.

如果您想要跨平台,几乎每个主要的窗口库都有屏幕抓取功能.这是使用PyQt4的示例:

import sys

from PyQt4.QtGui import QPixmap, QApplication

app = QApplication(sys.argv)

QPixmap.grabWindow(QApplication.desktop().winId()).save('screenshot.jpg', 'jpg')

如果您想要与Qt认为“桌面”的默认设置不同的东西,您需要深入了解PyQt或Qt文档.

缺点是这些跨平台窗口库在安装,分发方面通常都很重要,有时甚至是你如何构建程序.

另一种方法是使用特定于Windows的代码.虽然可以直接使用Windows API,但更简单的解决方案是PyWin32.

import win32gui, win32ui, win32con, win32api

hwin = win32gui.GetDesktopWindow()

width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)

height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)

left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)

top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

hwindc = win32gui.GetWindowDC(hwin)

srcdc = win32ui.CreateDCFromHandle(hwindc)

memdc = srcdc.CreateCompatibleDC()

bmp = win32ui.CreateBitmap()

bmp.CreateCompatibleBitmap(srcdc, width, height)

memdc.SelectObject(bmp)

memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)

bmp.SaveBitmapFile(memdc, 'screenshot.bmp')

像往常一样,你必须准确指出“桌面”的含义;此版本指定当前会话的“虚拟屏幕”,如果您在控制台本地运行,则为所有监视器的组合,如果您在终端服务上运行,则为远程视图.如果您想要不同的东西,您必须阅读MSDN上的相关Win32文档.但在大多数情况下,从文档转换到PyWin32是微不足道的.

(顺便说一句,即使我说“Win32”,同样适用于Win64.)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值