对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  __getattr__与__setattr__使用方法
Sep 06 Python
重命名批处理python脚本
Apr 05 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
python通过ftplib登录到ftp服务器的方法
May 08 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python命令 -u参数用法解析
Oct 24 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
Android Q之气泡弹窗的实现示例
Jun 23 Python
python实现自动清理重复文件
Aug 24 Python
python利用后缀表达式实现计算器功能
Feb 22 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
Javascript 陷阱 window全局对象
2008/11/26 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
js表单登陆验证示例
2016/10/19 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
js实现随机点名程序
2020/09/17 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
python中sleep函数用法实例分析
2015/04/29 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
详解Python爬虫的基本写法
2016/01/08 Python
浅谈编码,解码,乱码的问题
2016/12/30 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
标记环介质访问控制协议
2016/03/27 面试题
党校培训思想汇报
2013/12/30 职场文书
大二自我鉴定
2014/01/31 职场文书
致100米运动员广播稿
2014/02/14 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
数学系毕业生求职信
2014/05/29 职场文书
单位同意报考证明
2015/06/17 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js