对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随机生成一个6位的验证码代码分享
Mar 24 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
python 网络编程常用代码段
Aug 28 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
May 22 Python
python实现停车管理系统
Nov 30 Python
python opencv读mp4视频的实例
Dec 07 Python
Django时区详解
Jul 24 Python
python Jupyter运行时间实例过程解析
Dec 13 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
Mar 05 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python入门学习之类的相关知识总结
May 25 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
今天是星期几的4种JS代码写法
2013/09/17 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
jquery限定文本框只能输入数字(整数和小数)
2016/01/08 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
Python 内存管理机制全面分析
2021/01/16 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
工厂厂长岗位职责
2013/11/08 职场文书
干部现实表现材料
2014/02/13 职场文书
对教师的评语
2014/04/28 职场文书
会计专业毕业生自荐书
2014/06/25 职场文书
科学发展观标语
2014/10/08 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS