2011-01-03 17 views
16

के बिना पाइथन विंडोज 7 स्क्रीनशॉट मैं अजगर का उपयोग कर एक स्क्रीनशॉट लेना चाहता हूं।पीआईएल

मैंने पीआईएल का उपयोग करने की कोशिश की है, लेकिन चूंकि मैं 64 बिट विंडोज़ का उपयोग कर रहा हूं और पाइथन पीआईएल काम नहीं करता है (मुझे केवल 32 बिट पीआईएल संस्करण मिल सकते हैं)। मैं रास्ते से अजगर 2.7.1 का उपयोग कर रहा हूँ।

मैं एक स्क्रीनशॉट लेना चाहता हूं, यह वास्तव में कोई फर्क नहीं पड़ता कि, जब तक यह गति में प्रति सेकंड 1 से अधिक समय ले सकता है। अधिमानतः यह उस क्षेत्र को फसल करने में सक्षम होना चाहिए जो इसे स्क्रीनशॉट लेता है, लेकिन यह अत्यंत महत्वपूर्ण नहीं है।

मुख्य समस्या यह है कि मैं 64 बिट पर चल रहा हूं और बहुत सी चीजें इसके साथ असंगत लगती हैं। यदि संभव हो तो मैं वास्तव में 32 बिट पर वापस नहीं जाना चाहता हूं। क्या कोई प्रोग्राम या मॉड्यूल हैं जो यह कर सकते हैं?

+1

क्यों 32 अजगर का उपयोग नहीं? –

उत्तर

30

http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil पर win-amd64-py2.7 के लिए पीआईएल प्राप्त करें।

from PIL import ImageGrab 
im = ImageGrab.grab() 
im.save('screenshot.png') 

अद्यतन: उपयोग pywin32 (http://sourceforge.net/projects/pywin32/) जनहित याचिका के बजाय कई आभासी स्क्रीन के स्क्रीनशॉट लेने के लिए:

import win32gui, win32ui, win32con, win32api 
hwin = win32gui.GetDesktopWindow() 
width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN) 
height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) 
left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN) 
top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN) 
hwindc = win32gui.GetWindowDC(hwin) 
srcdc = win32ui.CreateDCFromHandle(hwindc) 
memdc = srcdc.CreateCompatibleDC() 
bmp = win32ui.CreateBitmap() 
bmp.CreateCompatibleBitmap(srcdc, width, height) 
memdc.SelectObject(bmp) 
memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) 
bmp.SaveBitmapFile(memdc, 'screenshot.bmp') 
+4

... अगर (जैसा कि मैं नाम से मानता हूं) आप लिंक की गई साइट के लिए ज़िम्मेदार हैं, तो कुडोस! मैं 64-बिट में साइप्री को ठीक से संकलित करने की कोशिश कर पागल हो रहा था ;-) –

+0

धन्यवाद! वह पीआईएल संस्करण वही था जो मैं खोज रहा था लेकिन नहीं मिला। Win32gui के साथ आप कैसे कई वर्चुअल स्क्रीन के स्क्रीनशॉट लेते हैं? मैं जो करना चाहता हूं वह बार-बार मेरी स्क्रीन के एक हिस्से का स्क्रीनशॉट लेता है, क्या पीआईएल भी ऐसा कर सकता है या उसके लिए pywin32 बेहतर है? (और क्या 64 बिट पायथन/विंडोज 7 के साथ pywin32 काम करता है? नाम भ्रामक है :)) – Max

+0

ImageGrab.grab() एक वैकल्पिक बॉक्स तर्क (http://www.pythonware.com/library/pil/handbook/imagegrab लेता है। htm)। – cgohlke

1

32- या 64-बिट विंडोज अप्रासंगिक है; यह पाइथन और इसके मॉड्यूल की 'बिट-नेस' है जो मायने रखता है। यदि आप 32-बिट-संकलित पायथन चला रहे हैं, तो 32-बिट-संकलित पीआईएल 64-बिट विंडोज़ पर ठीक काम करेगा।

दूसरी तरफ, यदि आप 64-बिट-संकलित पायथन चला रहे हैं, तो आपको मिलान करने के लिए पीआईएल के 64-बिट-संकलित संस्करण को ढूंढने या अनुकूलित करने की आवश्यकता है।

संपादित करें:

आप http://www.lfd.uci.edu/~gohlke/pythonlibs/ से जनहित याचिका की एक 64-बिट संकलित संस्करण को डाउनलोड कर सकते हैं - विशेष रूप से, आप चाहते हैं जनहित याचिका-1.1.7.win-amd64-py2.7.exe

+0

ठीक है, धन्यवाद! यह वही है जो मैं खोज रहा था लेकिन नहीं मिला। – Max