2010-05-17 5 views
26

Ich erstelle ein Beta-Tester-Modul, damit sie ihre Kommentare zu meiner Software senden können, aber ich hätte gerne die Möglichkeit, einen Screenshot mit dem Bericht zu erstellen. Wie mache ich einen Screenshot des Bildschirms mit Python unter Windows? Ich habe einige Beispiele für Linux gefunden, aber ich hatte unter Windows nicht viel Glück.Holen Sie sich einen Screenshot unter Windows mit Python?

+1

Dieses ist für mich gearbeitet: http: // Stackoverflow. com/questions/4589206/python-windows-7-screenshot-ohne-pil – User

Antwort

19

Beachten Sie, dass ImageGrab nur auf MSWindows funktioniert.

Für Cross-Plattform-Kompatibilität, eine Person möglicherweise am besten mit der Verwendung der WxPython-Bibliothek. 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

AttributeError: 'Modul' Objekt hat kein Attribut 'App' –

+3

app = wx.App() sonst könnten Sie erhalten: wx._core.PyNoAppError: The wx.App-Objekt muss zuerst erstellt werden! Download wxPython von hier aus: http://wxpython.org/download.php Aus irgendeinem Grund ist es nicht das gleiche "wx", wenn Sie nur "pip installieren wx" –

+0

CLI Windows herauskommen leer – olekb

3

Ein einfacher Weg, um einen Screenshot aufzunehmen, ist durch Pygame.

pygame.image.save(Surface, filename) 

Wo ‚Surface‘ ist die Oberfläche, die Sie einen Screenshot nehmen, und ‚Dateiname‘ ist der Dateipfad, Name und Art, wo Sie thew Bild speichern.

Sie können als BMP, TGA, PNG oder JPEG exportieren. Ab Pygame 1.8 funktionieren auch PNG und JPEG.

Wenn keine Dateierweiterung angegeben ist, wird standardmäßig eine .TGA-Datei verwendet.

Sie können sogar die "os" -Bibliothek zum Speichern in bestimmten Dateiverzeichnissen verwenden.

Ein Beispiel:

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")) 

Das spart etwas auf der ‚Oberfläche‘ Oberfläche auf dem Desktop des Benutzers als pic.png

+0

Zwei Fragen: 1. Ist pygame plattformunabhängig? 2. Können Sie einen Screenshot mit mehreren Monitoren erstellen? –

+1

Soweit ich weiß, ist Pygame Plattform unabhängig. Dieser Code zeigt nur den Pygame-Bildschirm und nur den Pygame-Bildschirm an.Wenn Ihr Bildschirm sich über zwei Monitore erstreckt, würde ich denken, dass es möglich wäre (obwohl ich das nicht testen kann). Hoffe das hilft! – CPSuperstore

0

Sie das Modul Imagegrab verwenden können. ImageGrab funktioniert nur unter Windows, und Sie benötigen PIL (Pillow), um es zu verwenden. Hier ist ein kleines Beispiel:

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

Ein weiterer Ansatz, der wirklich schnell ist das MSS Modul. Es unterscheidet sich von anderen Lösungen in der Art, dass es nur das ctypes Standardmodul verwendet, so dass es keine großen Abhängigkeiten erfordert. Es ist O unabhängige und seine Verwendung ist einfach:

from mss import mss 

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

Und findet die screenshot.png Datei den Screenshot des ersten Monitors enthält. Es gibt eine Menge von possibile Anpassungen können Sie mit ScreenShot Objekte und OpenCV/Numpy/PIL spielen/etc ..

+1

Weitere Beispiele finden Sie in https://python-mss.readthedocs.io/en/dev/examples.html – tal

+0

@tal: Ihr Link ist veraltet. Könnten Sie bitte aktualisieren? –

+0

@ Tiger-222: Wie würden Sie mehrere Monitore bekommen? –

0

Für pyautogui Benutzer:

import pyautogui 
screenshot = pyautogui.screenshot() 
Verwandte Themen