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)

  • 相关阅读:
    BZOJ4923 K小值查询(splay)
    BZOJ4919 大根堆(动态规划+treap+启发式合并)
    BZOJ4922 Karp-de-Chant Number(贪心+动态规划)
    BZOJ4915 简单的数字题
    BZOJ4921 互质序列
    BZOJ4898/5367 Apio2017商旅(分数规划+floyd)
    BZOJ4899 记忆的轮廓(概率期望+动态规划+决策单调性)
    Educational Codeforces Round 55 Div. 2 翻车记
    166. Fraction to Recurring Decimal
    390. Elimination Game
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11044469.html
Copyright © 2011-2022 走看看