对Python获取屏幕截图的4种方法详解


Posted in Python onAugust 27, 2019

Python获取电脑截图有多种方式,具体如下:

PIL中的ImageGrab模块

windows API

PyQt

pyautogui

PIL中的ImageGrab模块

import time
import numpy as np
from PIL import ImageGrab

img = ImageGrab.grab(bbox=(100, 161, 1141, 610))
img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3)

使用PIL中的ImageGrab模块简单,但是效率有点低,截屏一次需0.5s。

windows API

调用windows API,速度快但是使用较复杂,这里就不做详细介绍了,因为有更好用的PyQt。

PyQt

PyQt比调用windows API简单很多,而且有windows API的很多优势,比如速度快,可以指定获取的窗口,即使窗口被遮挡。需注意的是,窗口最小化时无法获取截图。

首先需要获取窗口的句柄。

import win32gui
hwnd_title = dict()
def get_all_hwnd(hwnd,mouse):
  if win32gui.IsWindow(hwnd) and win32gui.IsWindowEnabled(hwnd) and win32gui.IsWindowVisible(hwnd):
    hwnd_title.update({hwnd:win32gui.GetWindowText(hwnd)})

win32gui.EnumWindows(get_all_hwnd, 0)
 
for h,t in hwnd_title.items():
  if t is not "":
    print(h, t)

程序会打印窗口的hwnd和title,有了title就可以进行截图了。

from PyQt5.QtWidgets import QApplication
  from PyQt5.QtGui import *
  import win32gui
  import sys

  hwnd = win32gui.FindWindow(None, 'C:\Windows\system32\cmd.exe')
  app = QApplication(sys.argv)
  screen = QApplication.primaryScreen()
  img = screen.grabWindow(hwnd).toImage()
  img.save("screenshot.jpg")

pyautogui

pyautogui是比较简单的,但是不能指定获取程序的窗口,因此窗口也不能遮挡,不过可以指定截屏的位置,0.04s一张截图,比PyQt稍慢一点,但也很快了。

import pyautogui
import cv2

img = pyautogui.screenshot(region=[0,0,100,100]) # x,y,w,h
# img.save('screenshot.png')
img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)

以上这篇对Python获取屏幕截图的4种方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
Python用for循环实现九九乘法表
May 31 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
python 实现倒排索引的方法
Dec 25 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
TensorFLow 变量命名空间实例
Feb 11 Python
Python @property及getter setter原理详解
Mar 31 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 Python
基于Python实现的购物商城管理系统
Apr 27 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
python对常见数据类型的遍历解析
Aug 27 #Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
Aug 27 #Python
python实现一个函数版的名片管理系统过程解析
Aug 27 #Python
python中下标和切片的使用方法解析
Aug 27 #Python
python使用if语句实现一个猜拳游戏详解
Aug 27 #Python
Python socket 套接字实现通信详解
Aug 27 #Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 #Python
You might like
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
javascript 二进制运算技巧解析
2012/11/27 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
python 调用HBase的简单实例
2016/12/18 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
python 读取txt,json和hdf5文件的实例
2018/06/05 Python
python语言元素知识点详解
2019/05/15 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
文职个人求职信范文
2013/09/23 职场文书
外贸业务员工作职责
2014/01/06 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
节约用水演讲稿
2014/05/21 职场文书
python实现监听键盘
2021/04/26 Python