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种方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2019-08-25

python截图黑屏_对Python获取屏幕截图的4种方法详解相关推荐

  1. python 句柄窗口指定位置截图_对Python获取屏幕截图的4种方法详解

    Python获取电脑截图有多种方式,具体如下: PIL中的ImageGrab模块 windows API PyQt pyautogui PIL中的ImageGrab模块 import time imp ...

  2. python输入字符串并反序result_python字符串反转的四种方法详解

    python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...

  3. python定义静态变量_对Pyhon实现静态变量全局变量的方法详解

    python不能像C++一样直接定义一个static变量或者通过extern来导入别的库的变量而实现数据共享,但是python的思想是通过模块化来解决这个问题,就是通过模块来实现全局变量. 首先新建一 ...

  4. 批量 杀掉 mysql 连接_批量杀死MySQL连接的四种方法详解

    方法一 通过information_schema.processlist表中的连接信息生成需要处理掉的MySQL连接的语句临时文件,然后执行临时文件中生成的指令.复制代码 代码如下:mysql> ...

  5. spring获取webapplicationcontext,applicationcontext几种方法详解(转载)

    转载自  http://www.blogjava.net/Todd/archive/2010/04/22/295112.html 方法一:在初始化时保存ApplicationContext对象 代码: ...

  6. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

  7. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

  8. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  9. ios 获取html的高度,iOS Webview自适应实际内容高度的4种方法详解

    //第一种方法 - (void)webViewDidFinishLoad:(UIWebView *)webView { CGFloat webViewHeight=[webView.scrollVie ...

最新文章

  1. AI当红娘,真的能帮你摆脱单身吗?
  2. 3D视觉技术的6个问答
  3. 开源|阿里巴巴的国产JDK Dragonwell:龙井
  4. python【蓝桥杯vip练习题库】ADV-92求最大公约数(递归)
  5. Codeforces-722C-Destroying Array(离线并查集)
  6. telnet WIN7 不回显的解决办法
  7. 关于软件组织培训的几个值得提倡的建议
  8. 自己在项目设计和开发的一些总结
  9. git学习之时光机穿梭(四)
  10. HibernateTemplate使用方法
  11. [论文笔记]ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS
  12. 数字图像来源:光学成像系统
  13. 央企如何做好数字化转型战略规划
  14. 指南针c语言程序,HMC5883L电子指南针单片机程序
  15. D盘下的 msdia80.dll 怎么处理?
  16. 信息学奥赛一本通 1293:买书 | OpenJudge NOI 2.6 6049:买书
  17. centos7桌面没有计算机图标,Centos7,桌面图标消失且右键失效
  18. UltraVNC远程控制其他电脑
  19. 【CISSP备考】第五章-身份与访问管理
  20. 数据库~如何快速、准确选取候选码(候选键)?

热门文章

  1. 修改Windows的git bash的主题(样式)
  2. 【新手入门】Oozie workflow如何在action之间传递参数
  3. 谷歌小恐龙修改无敌刷分
  4. C++ 谷歌小恐龙#1 游戏制作实录
  5. java代码解压ZIP文件
  6. 【Kettle从零开始】第二弹之Kettle文件夹与界面介绍
  7. 野火STM32学习(6)
  8. 付费系列 4 - 双障碍和双触碰期权 PDE 有限差分
  9. Linux磁盘的分区
  10. 【统计学习】25个必须掌握的数据分析基础概念