2010-05-17 39 views
26

Estoy creando un módulo de informes Beta Testers para que puedan enviar sus comentarios sobre mi software, pero me gustaría tener la opción de incluir una captura de pantalla con el informe. ¿Cómo hago una captura de pantalla de la pantalla con Python en Windows? He encontrado varios ejemplos en Linux, pero no he tenido mucha suerte en Windows.Obtener captura de pantalla en Windows con Python?

+1

Éste trabajó para mí: http: // stackoverflow. com/questions/4589206/python-windows-7-screenshot-without-pil – User

Respuesta

19

Vale la pena señalar que ImageGrab solo funciona en MSWindows.

Para la compatibilidad multiplataforma, una persona puede aprovechar mejor el uso de la biblioteca 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

AttributeError: el objeto 'module' no tiene ningún atributo 'App' –

+3

app = wx.App() de lo contrario, puede obtener: wx._core.PyNoAppError: The ¡El objeto wx.App debe crearse primero! Además, descargue wxPython desde aquí: http://wxpython.org/download.php Por alguna razón, no es lo mismo "wx" si solo hace "pip install wx" –

+0

Las ventanas de la CLI salen vacías – olekb

3

Una forma sencilla de tomar una captura de pantalla es a través de Pygame.

pygame.image.save(Surface, filename) 

Donde 'Surface' es la superficie que está tomando una captura de pantalla, y 'nombre' es la ruta del archivo, el nombre y tipo en el que se guarda la imagen durmieron.

Puede exportar como BMP, TGA, PNG o JPEG. A partir de Pygame 1.8, PNG y JPEG también funcionan.

Si no se especifica una extensión de archivo, tendrá un archivo .TGA predeterminado.

Incluso puede usar la biblioteca 'os' para guardar en directorios de archivos específicos.

Un ejemplo:

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

Esto ahorra nada sobre la superficie 'superficie' en el escritorio del usuario como pic.png

+0

Dos preguntas: 1. ¿Es pygame independiente de la plataforma? 2. ¿Puedes obtener una captura de pantalla de múltiples monitores? –

+1

Por lo que sé, Pygame es una plataforma independiente. Este código solo capturará pantalla de pygame, y solo la pantalla de pygame.Si su pantalla abarca 2 monitores, creo que podría (aunque no puedo probar esto). ¡Espero que esto ayude! – CPSuperstore

0

Usted puede utilizar el módulo ImageGrab. ImageGrab solo funciona en Windows, y necesita PIL (almohada) para usarlo. Aquí hay un pequeño ejemplo:

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

Otro enfoque que es muy rápido es el módulo MSS. Es diferente de otras soluciones en la forma en que usa solo el módulo estándar ctypes, por lo que no requiere grandes dependencias. Es independiente del sistema operativo y su uso es fácil:

from mss import mss 

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

Y acaba de encontrar el archivo que contiene el screenshot.png captura de pantalla del primer monitor. Hay un montón de personalizaciones possibile, se puede jugar con ScreenShot objetos y OpenCV/Numpy/PIL/etc ..

+1

ver más ejemplos en https://python-mss.readthedocs.io/en/dev/examples.html – tal

+0

@tal: Su enlace no está actualizado. ¿Podrías actualizar? –

+0

@ Tiger-222: ¿Cómo obtendrías varios monitores? –

0

Para los usuarios pyautogui:

import pyautogui 
screenshot = pyautogui.screenshot() 
Cuestiones relacionadas