在windows上用python截图的最快方法
什么是在Windows上截图的最快方式? PIL.ImageGrab
相当慢,需要4-5秒才能截取同一个小窗口的30张截图。 整个桌面的截图甚至更慢。
你可以直接使用win32 API。
1)首先把重点放在你想截图的App上。 链接文本
2) Win32 API可以帮助截图:
import win32gui import win32ui hwnd = win32gui.FindWindow(None, windowname) wDC = win32gui.GetWindowDC(hwnd) dcObj=win32ui.CreateDCFromHandle(wDC) cDC=dcObj.CreateCompatibleDC() dataBitMap = win32ui.CreateBitmap() dataBitMap.CreateCompatibleBitmap(dcObj, w, h) cDC.SelectObject(dataBitMap) cDC.BitBlt((0,0),(w, h) , dcObj, (0,0), win32con.SRCCOPY) dataBitMap.SaveBitmapFile(cDC, bmpfilenamename) # Free Resources dcObj.DeleteDC() cDC.DeleteDC() win32gui.ReleaseDC(hwnd, wDC) win32gui.DeleteObject(dataBitMap.GetHandle())
只是发现如何与gtk做到这一点。 似乎最快的是:
def image_grab_gtk(window): left, top, right, bot = get_rect(window) w = right - left h = bot - top s = gtk.gdk.Pixbuf( gtk.gdk.COLORSPACE_RGB, False, 8, w, h) s.get_from_drawable( gtk.gdk.get_default_root_window(), gtk.gdk.colormap_get_system(), left, top, 0, 0, w, h ) final = Image.frombuffer( "RGB", (w, h), s.get_pixels(), "raw", "RGB", s.get_rowstride(), 1) return final
没有转换成PIL
图像,它比我的testing案例中的PIL快了8倍。 随着转换,它仍然约2.7倍的速度。