对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 pass详细介绍及实例代码
Nov 24 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
对numpy和pandas中数组的合并和拆分详解
Apr 11 Python
python脚本实现验证码识别
Jun 07 Python
python版飞机大战代码分享
Nov 20 Python
Django将默认的SQLite更换为MySQL的实现
Nov 18 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
Keras自定义IOU方式
Jun 10 Python
Python pytesseract验证码识别库用法解析
Jun 29 Python
Python调用C/C++的方法解析
Aug 05 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
Aug 22 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 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
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
PHP 类与构造函数解析
2017/02/06 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
js获取url传值的方法
2015/12/18 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
nodejs基础知识
2017/02/03 NodeJs
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
详解python单例模式与metaclass
2016/01/15 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
Python模块的加载讲解
2019/01/15 Python
使用python实现简单五子棋游戏
2019/06/18 Python
python 并发下载器实现方法示例
2019/11/22 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Python接收手机短信的代码整理
2020/08/02 Python
python 调整图片亮度的示例
2020/12/03 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
大学生毕业自我鉴定
2013/11/06 职场文书
学习委员自我鉴定
2014/01/13 职场文书
材料会计岗位职责
2014/03/06 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
保护环境建议书100字
2014/05/13 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
常用的Python代码调试工具总结
2021/06/23 Python