2010-05-17 10 views
26

मैं बीटा टेस्टर्स रिपोर्टिंग मॉड्यूल बना रहा हूं ताकि वे मेरे सॉफ़्टवेयर पर अपनी टिप्पणियों में भेज सकें, लेकिन मैं रिपोर्ट के साथ एक स्क्रीनशॉट शामिल करने का विकल्प चाहता हूं। मैं विंडोज़ पर पायथन के साथ स्क्रीन का स्क्रीनशॉट कैसे ले सकता हूं? मुझे लिनक्स पर कई उदाहरण मिले हैं, लेकिन विंडोज़ पर बहुत भाग्य नहीं है।पायथन के साथ विंडोज़ पर स्क्रीनशॉट प्राप्त करें?

+1

यह एक मेरे लिए काम किया // stackoverflow। कॉम/प्रश्न/4589206/पायथन-विंडोज -7-स्क्रीनशॉट-बिना-पायल – User

उत्तर

19

यह ध्यान देने योग्य है कि ImageGrab केवल MSWindows पर काम करता है।

क्रॉस प्लेटफार्म संगतता के लिए, एक व्यक्ति wxPython लाइब्रेरी का उपयोग करने के साथ सबसे अच्छा हो सकता है। http://wiki.wxpython.org/WorkingWithImages#A_Flexible_Screen_Capture_App

import wx 
wx.App() # Need to create an App instance before doing anything 
screen = wx.ScreenDC() 
size = screen.GetSize() 
bmp = wx.EmptyBitmap(size[0], size[1]) 
mem = wx.MemoryDC(bmp) 
mem.Blit(0, 0, size[0], size[1], screen, 0, 0) 
del mem # Release bitmap 
bmp.SaveFile('screenshot.png', wx.BITMAP_TYPE_PNG) 
+0

विशेषताएँ त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'ऐप' –

+3

ऐप = wx.App() अन्यथा आपको मिल सकता है: wx._core.PyNoAppError: wx.App ऑब्जेक्ट पहले बनाया जाना चाहिए! इसके अलावा, यहां से wxPython डाउनलोड करें: http://wxpython.org/download.php किसी कारण से यह वही "wx" नहीं है यदि आप "पीआईपी इंस्टॉल करें wx" –

+0

सीएलआई विंडो खाली बाहर आ रहे हैं – olekb

3

स्क्रीनशॉट लेने के लिए एक आसान तरीका pygame माध्यम से है।

pygame.image.save(Surface, filename) 

कहाँ 'सतह' सतह जिसका आप स्क्रीनशॉट, और 'फ़ाइल नाम' ले रहे हैं फ़ाइल पथ, नाम और प्रकार जहां thew छवि को बचाने के लिए है।

आप बीएमपी, टीजीए, पीएनजी, या जेपीईजी के रूप में निर्यात कर सकते हैं। Pygame 1.8 के रूप में, पीएनजी, और जेपीईजी भी काम करते हैं।

यदि कोई फ़ाइल एक्सटेंशन निर्दिष्ट नहीं है तो यह एक टीजीए फ़ाइल के लिए डिफ़ॉल्ट होगा।

आप विशिष्ट फ़ाइल निर्देशिकाओं को सहेजने के लिए 'ओएस' लाइब्रेरी का भी उपयोग कर सकते हैं।

एक उदाहरण:

import os 
import pygame 
surface = pygame.display.set_mode((100, 100), 0, 32) 
surface.fill((255, 255, 255)) 
pygame.draw.circle(surface, (0, 0, 0), (10, 10), 15, 0) 
pygame.display.update() 
pygame.image.save(surface, os.path.expanduser("~/Desktop/pic.png")) 

यह pic.png

+0

दो प्रश्न: 1. क्या पायगम प्लेटफ़ॉर्म-स्वतंत्र है? 2. क्या आप एक बहु-मॉनिटर स्क्रीनशॉट प्राप्त कर सकते हैं? –

+1

जहाँ तक मुझे पता है, पायगम प्लेटफार्म स्वतंत्र है। यह कोड केवल pygame स्क्रीन को स्क्रीनशॉट करेगा, और केवल pygame स्क्रीन।यदि आपकी स्क्रीन 2 मॉनीटरों में फैली हुई है, तो मुझे लगता है कि यह सक्षम होगा (हालांकि मैं इसका परीक्षण करने में असमर्थ हूं)। उम्मीद है की यह मदद करेगा! – CPSuperstore

0

आप ImageGrab मॉड्यूल का उपयोग कर सकते हैं के रूप में उपयोगकर्ता के डेस्कटॉप 'सतह' सतह पर कुछ भी बचत होती है। ImageGrab केवल विंडोज पर काम करता है, और आपको इसका उपयोग करने के लिए PIL (तकिया) की आवश्यकता है।

import ImageGrab 
snapshot = ImageGrab.grab() 
save_path = "C:\\Users\\YourUser\\Desktop\\MySnapshot.jpg" 
snapshot.save(save_path) 
6

एक और दृष्टिकोण है कि वास्तव में तेजी से MSS मॉड्यूल है: यहाँ एक छोटे से उदाहरण है। यह अन्य समाधानों से अलग है जिस तरह से यह केवल ctypes मानक मॉड्यूल का उपयोग करता है, इसलिए इसे बड़ी निर्भरताओं की आवश्यकता नहीं होती है। यह ओएस स्वतंत्र है और इसके उपयोग करना आसान हो गया है:

from mss import mss 

with mss() as sct: 
    sct.shot() 

और बस पहले मॉनिटर की स्क्रीन शॉट युक्त screenshot.png फ़ाइल पाते हैं। वहाँ संभव अनुकूलन का एक बहुत कुछ कर रहे हैं, तो आप ScreenShot वस्तुओं और OpenCV/Numpy/जनहित याचिका/आदि ..

+1

https://python-mss.readthedocs.io/en/dev/examples.html – tal

+0

@tal में अधिक उदाहरण देखें: आपका लिंक पुराना है। क्या आप अपडेट कर सकते हैं? –

+0

@ टाइगर -222: आप एकाधिक मॉनीटर कैसे प्राप्त करेंगे? –

0

साथ खेल सकते हैं pyautogui उपयोगकर्ताओं के लिए: http:

import pyautogui 
screenshot = pyautogui.screenshot() 
संबंधित मुद्दे