对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中操作字典之clear()方法的使用
May 21 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
Python File readlines() 使用方法
Mar 19 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
Python简单获取二维数组行列数的方法示例
Dec 21 Python
通过pykafka接收Kafka消息队列的方法
Dec 27 Python
Python获取网段内ping通IP的方法
Jan 31 Python
django+tornado实现实时查看远程日志的方法
Aug 12 Python
详解python中*号的用法
Oct 21 Python
dpn网络的pytorch实现方式
Jan 14 Python
python 如何引入协程和原理分析
Nov 30 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 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
PHP daddslashes 使用方法介绍
2012/10/26 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
php+jQuery递归调用POST循环请求示例
2016/10/14 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
js数组操作学习总结
2013/11/04 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
js 操作符汇总
2014/11/08 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python实现baidu hi自动登录的代码
2013/02/10 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
Python将列表中的元素转化为数字并排序的示例
2019/12/25 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
python3的pip路径在哪
2020/06/23 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
公司表扬稿范文
2015/05/05 职场文书
交通安全温馨提示语
2015/07/14 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
Python+pyaudio实现音频控制示例详解
2022/07/23 Python