对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实现斐波那契递归函数的方法
Sep 08 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
python实现聊天小程序
Mar 13 Python
python函数式编程学习之yield表达式形式详解
Mar 25 Python
django如何连接已存在数据的数据库
Aug 14 Python
对python中的argv和argc使用详解
Dec 15 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
python对文件目录的操作方法实例总结
Jun 24 Python
利用python实现PSO算法优化二元函数
Nov 13 Python
在notepad++中实现直接运行python代码
Dec 18 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
react基本安装与测试示例
2020/04/27 Javascript
Python continue语句用法实例
2014/03/11 Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
canvas简单连线动画的实现代码
2020/02/04 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
怎样从/向数据文件读/写结构
2014/11/23 面试题
什么是Remote Module
2016/06/10 面试题
儿子婚宴答谢词
2014/01/09 职场文书
护士毕业生自荐信
2014/02/07 职场文书
师范生见习自我总结
2015/06/23 职场文书
幼儿园六一主持词
2015/06/30 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
赞助商致辞
2015/07/30 职场文书