对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实现从ftp服务器下载文件的方法
Apr 30 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
Django 多环境配置详解
May 14 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
Python类和实例的属性机制原理详解
Mar 21 Python
python 获取字典键值对的实现
Nov 12 Python
python实现图片转字符画的完整代码
Feb 21 Python
python基于opencv批量生成验证码的示例
Apr 28 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设计模式 php实现建造者模式
2015/12/07 PHP
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
通过命令行创建vue项目的方法
2017/07/20 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
详解Angular中通过$location获取地址栏的参数
2018/08/02 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
Python常见异常分类与处理方法
2017/06/04 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
基于python的itchat库实现微信聊天机器人(推荐)
2019/10/29 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
毕业生求职的求职信
2013/12/05 职场文书
常务副总经理任命书
2014/06/05 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
工程质检员岗位职责
2015/04/08 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
士兵突击观后感
2015/06/16 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
MySQL大小写敏感的注意事项
2021/05/24 MySQL