对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处理python编码问题
Mar 13 Python
python list使用示例 list中找连续的数字
Jan 27 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
使用Python+wxpy 找出微信里把你删除的好友实例
Feb 21 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
python实现扫雷游戏
Mar 03 Python
Python socket处理client连接过程解析
Mar 18 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
查看jupyter notebook每个单元格运行时间实例
Apr 22 Python
TensorFlow的自动求导原理分析
May 26 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使用exec shell命令注入的方法讲解
2013/11/12 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP7多线程搭建教程
2017/04/21 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
jquery禁用右键示例
2014/04/28 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
浅谈Vue 函数式组件的使用技巧
2020/06/16 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python中特殊函数集锦
2015/07/27 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
酒店总经理欢迎词
2014/01/08 职场文书
群众路线党课主持词
2014/04/01 职场文书
银行党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
高中教师个人总结
2015/02/10 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
python执行js代码的方法
2021/05/13 Python
Mysql binlog日志文件过大的解决
2021/10/05 MySQL