博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python实现屏幕截图
阅读量:4182 次
发布时间:2019-05-26

本文共 1442 字,大约阅读时间需要 4 分钟。

Python调用windows API实现屏幕截图

好处是

  • 灵活
  • 速度快

缺点是:

  • 写法繁琐
  • 不跨平台
import timeimport win32gui, win32ui, win32con, win32apidef window_capture(filename):    hwnd = 0  # 窗口的编号,0号表示当前活跃窗口    # 根据窗口句柄获取窗口的设备上下文DC(Divice Context)    hwndDC = win32gui.GetWindowDC(hwnd)    # 根据窗口的DC获取mfcDC    mfcDC = win32ui.CreateDCFromHandle(hwndDC)    # mfcDC创建可兼容的DC    saveDC = mfcDC.CreateCompatibleDC()    # 创建bigmap准备保存图片    saveBitMap = win32ui.CreateBitmap()    # 获取监控器信息    MoniterDev = win32api.EnumDisplayMonitors(None, None)    w = MoniterDev[0][2][2]    h = MoniterDev[0][2][3]    # print w,h   #图片大小    # 为bitmap开辟空间    saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)    # 高度saveDC,将截图保存到saveBitmap中    saveDC.SelectObject(saveBitMap)    # 截取从左上角(0,0)长宽为(w,h)的图片    saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)    saveBitMap.SaveBitmapFile(saveDC, filename)beg = time.time()for i in range(10):    window_capture("haha.jpg")end = time.time()print(end - beg)

输出结果为0.375秒,也就是说通过windows API每次截图只需要0.0375s,真是快得一逼呀。

使用PIL的ImageGrab模块

import timefrom PIL import ImageGrabimport numpy as npimport cv2beg = time.time()debug = False# img = ImageGrab.grab(bbox=(250, 161, 1141, 610))img = ImageGrab.grab()end = time.time()print('time:',end - beg)img.show()img.save("screen.jpg")# PIL image to OpenCV imageim = np.array(img)cv2.imshow('cv image', im)cv2.waitKey()# OpenCV image to PIL imageim_pil = PIL.Image.fromarray(im)im_pil.show()

时间大概0.036秒,效率还是可以的。

参考:

转载地址:http://tahai.baihongyu.com/

你可能感兴趣的文章
PortAudio+webrtc+lame实现采集降噪增益mp3
查看>>
视频压缩编码和音频压缩编码的基本原理
查看>>
利用FFmpeg玩转Android视频录制与压缩(二)
查看>>
利用FFmpeg玩转Android视频录制与压缩(三)
查看>>
windows10 编译x264出现 undefined reference to `_beginthreadex'解决
查看>>
使用vs2013或vs2015 编译ffmpeg
查看>>
win10 msys2 vs2015 ffmpeg3.3.3 编译 带x264 aac
查看>>
视频存储格式YUV420 NV12 NV21 i420 YV12
查看>>
流媒体加密
查看>>
msys2 安装笔记
查看>>
H264码流中SPS PPS详解
查看>>
AAC音频格式简析
查看>>
Ubuntu 12.04 联想G470 显卡驱动安装,AMD Radeon HD 6300M Series 驱动安装
查看>>
ffmpeg集成libx264编码错误,提示“Input picture width(xxx) is greater than stride(0)” 问题解决
查看>>
ffmpeg sws_scale函数详解
查看>>
C++单例模式
查看>>
vs2017使用libfdk-aac 链接提示没有“COMDAT 0xF”错误解决
查看>>
“无法定位程序输入点 aacEncClose 于动态链接库的奇葩问题
查看>>
如何使用MP4SetTrackESConfiguration
查看>>
多媒体 MP4V2 录制mp4(h264+aac)音视频同步
查看>>