나는 매 초마다 내 데스크톱의 스크린 샷을 찍을 수있는 스크립트를 고안하려고 애 쓰고 있습니다. 나는 Win10을 사용하고있다.Python : 스크린 샷을 찍고 저장하는 가장 빠른 방법
PIL은 :
from PIL import ImageGrab
import time
while True:
im = ImageGrab.grab()
fname = "dropfolder/%s.png" %int(time.time())
im.save(fname,'PNG')
이미지 당 1.01 초 결과.
PyScreeze (https://github.com/asweigart/pyscreeze는) :
import pyscreeze
import time
while True:
fname = "dropfolder/%s.png" %int(time.time())
x = pyscreeze.screenshot(fname)
이미지 당 1.00 초 결과.
에서 Win32는 :
import win32gui
import win32ui
import win32con
import time
w=1920 #res
h=1080 #res
while True:
wDC = win32gui.GetWindowDC(0)
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)
fname = "dropfolder/%s.png" %int(time.time())
dataBitMap.SaveBitmapFile(cDC, fname)
dcObj.DeleteDC()
cDC.DeleteDC()
win32gui.ReleaseDC(0, wDC)
win32gui.DeleteObject(dataBitMap.GetHandle())
이미지 당 1.01 초 결과.
그럼 스레드 (Fastest way to take a screenshot with python on windows)로 비틀 거리며 gtk가 놀라운 결과를 얻을 수 있다고 제안했습니다.
그러나 GTK를 사용하여 :import gtk
import time
img_width = gtk.gdk.screen_width()
img_height = gtk.gdk.screen_height()
while True:
screengrab = gtk.gdk.Pixbuf(
gtk.gdk.COLORSPACE_RGB,
False,
8,
img_width,
img_height
)
fname = "dropfolder/%s.png" %int(time.time())
screengrab.get_from_drawable(
gtk.gdk.get_default_root_window(),
gtk.gdk.colormap_get_system(),
0, 0, 0, 0,
img_width,
img_height
).save(fname, 'png')
는 이미지 당 2.34 초 결과.
나는 사람들이 gtk로 훌륭한 결과를 얻었 기 때문에 내가 뭔가 잘못하고있는 것처럼 보입니다.
프로세스에 대한 속도를 높이는 방법에 대한 조언이 있으십니까?
감사합니다.
얼마나 빨리 당신이 얻을 바라고있다? –