对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中使用中文的方法
Feb 19 Python
python返回昨天日期的方法
May 13 Python
python生成二维码的实例详解
Oct 29 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
Python常用特殊方法实例总结
Mar 22 Python
Python如何获取文件指定行的内容
May 27 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
浅谈Python类的单继承相关知识
May 12 Python
python中如何对多变量连续赋值
Jun 03 Python
Python实现聚类K-means算法详解
Jul 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表单转换textarea换行符的方法
2010/09/10 PHP
PHP源码之explode使用说明
2011/08/05 PHP
如何判断php数组的维度
2013/06/10 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php的常量和变量实例详解
2017/06/27 PHP
区分JS中的undefined,null,"",0和false
2007/03/08 Javascript
Cookie 小记
2010/04/01 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
详解vue组件基础
2018/05/04 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
python入门教程之基本算术运算符
2020/11/13 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
英国家电直销:Appliances Direct
2016/09/22 全球购物
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
ajax是什么及其工作原理
2012/02/08 面试题
城市精细化管理实施方案
2014/03/04 职场文书
2014年教育教学工作总结
2014/11/13 职场文书