对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 相关文章推荐
python的id()函数解密过程
Dec 25 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
使用Python编写基于DHT协议的BT资源爬虫
Mar 19 Python
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
TensorFlow实现模型评估
Sep 07 Python
python多进程读图提取特征存npy
May 21 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
python获取天气接口给指定微信好友发天气预报
Dec 28 Python
python绘制云雨图raincloud plot
Aug 05 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
SONY SRF-40W电路分析
2021/03/02 无线电
PHP超级全局变量数组小结
2012/10/04 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
Python实现手势识别
2020/10/21 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
初入社会应届生求职信
2013/11/18 职场文书
淘宝活动策划方案
2014/02/06 职场文书
成语的广告词
2014/03/19 职场文书
七一党日活动总结
2014/07/08 职场文书
机械机修工岗位职责
2014/08/03 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
PyTorch中permute的使用方法
2022/04/26 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL