对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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
python在windows下实现备份程序实例
Jul 04 Python
Python中的并发编程实例
Jul 07 Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
Python Collatz序列实现过程解析
Oct 12 Python
python opencv实现信用卡的数字识别
Jan 12 Python
python实现批量修改文件名
Mar 23 Python
python collections模块的使用
Oct 16 Python
Python中logging日志的四个等级和使用
Nov 17 Python
python 如何对logging日志封装
Dec 02 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 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树形菜单代码
2014/11/19 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
javascript动画浅析
2012/08/30 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
js实现日期级联效果
2014/01/23 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
javascript回调函数详解
2018/02/06 Javascript
angular5 httpclient的示例实战
2018/03/12 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
详解Python3中字符串中的数字提取方法
2017/01/14 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
python搜索算法原理及实例讲解
2020/11/18 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
什么是继承
2013/12/07 面试题
策划创业计划书
2014/02/06 职场文书
商场主管竞聘书
2014/03/31 职场文书
本科生自荐信
2014/06/18 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
同学聚会祝酒词
2015/08/10 职场文书
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL