对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 相关文章推荐
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
在Python中用GDAL实现矢量对栅格的切割实例
Mar 11 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
python基于turtle绘制几何图形
Jun 15 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实现页面静态化的超简单方法
2016/09/06 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
JavaScript移除数组元素减少长度的方法
2013/09/05 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
Python脚本实现自动发带图的微博
2016/04/27 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
HTML5中外部浏览器唤起微信分享
2020/01/02 HTML / CSS
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
幼儿园中秋节活动方案2013
2014/01/29 职场文书
运动会跳远广播稿
2014/02/04 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2014年计生协会工作总结
2014/11/21 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
行政上诉状范文
2015/05/23 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
安全生产奖惩制度
2015/08/06 职场文书
2019求职信大礼包
2019/05/15 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android