zoukankan      html  css  js  c++  java
  • Python实现屏幕截图

    好处是

    灵活
    速度快
    缺点是:

    写法繁琐
    不跨平台
    import time
    import win32gui, win32ui, win32con, win32api


    def 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)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    输出结果为0.375秒,也就是说通过windows API每次截图只需要0.0375s,真是快得一逼呀。

    使用PIL的ImageGrab模块
    import time
    from PIL import ImageGrab
    import numpy as np
    import cv2

    beg = 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 image
    im = np.array(img)
    cv2.imshow('cv image', im)
    cv2.waitKey()

    # OpenCV image to PIL image
    im_pil = PIL.Image.fromarray(im)
    im_pil.show(http://www.my516.com)

  • 相关阅读:
    iOS Hardware Guide
    安卓上为什么不能用system.io.file读取streammingAssets目录下的文件
    【转】【Unity+Lua】实测如何性能优化(Lua和C#交互篇)
    随手记:IDAPro蛮强大
    断线重连
    稀土掘金
    C#利用WebService接口下载文件
    C# sbyte[]转byte[]
    百度地图API示例 JS
    如何才能成为一个好的技术领导者?
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11044469.html
Copyright © 2011-2022 走看看