对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实现的登陆Discuz!论坛通用代码分享
Jul 11 Python
python多重继承实例
Oct 11 Python
Python3.6简单反射操作示例
Jun 14 Python
对python cv2批量灰度图片并保存的实例讲解
Nov 09 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
基于python图像处理API的使用示例
Apr 03 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
用Python实现Newton插值法
Apr 17 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
微信支付开发告警通知实例
2016/07/12 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
AngularJs Understanding the Controller Component
2016/09/02 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
Vuex,iView UI面包屑导航使用扩展详解
2019/11/04 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
python实现感知器算法(批处理)
2019/01/18 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
python脚本第一行如何写
2020/08/30 Python
django中ImageField的使用详解
2020/12/21 Python
浅谈HTML5 & CSS3的新交互特性
2016/07/19 HTML / CSS
酒店经理职责
2014/01/30 职场文书
施工材料员岗位职责
2014/02/12 职场文书
公司委托书范本
2014/04/04 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
教你用eclipse连接mysql数据库
2021/04/22 MySQL
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
java泛型通配符详解
2021/07/25 Java/Android
Nginx如何配置根据路径转发详解
2022/07/23 Servers