Blog
4 Opciones para Capturar Imagen de la Pantalla con Python
- Publicado por: Rafael Fernandez
- Categoría: Blog

Aunque Python no cuenta con una librería interna que nos permita hacer capturas de pantalla (aún), podemos lograr esto con la ayuda de algunos módulos de terceros.
Opción 1: Capturar imagen de la pantalla
PyAutoGUI es un módulo de Python para controlar el mouse y el teclado. Este módulo ayuda a la automatización de tareas como las capturas de pantallas, la cual se puede realizar con 3 líneas de código:
import pyautogui # Capturamos pantalla captura = pyautogui.screenshot() # Guardamos imagen captura.save('captura_pantalla.png')
Este módulo tiene como dependencia a Pillow, uno de los módulos para manejo de imagenes más populares de Python.
Si queremos capturar solo una región de la pantalla, podemos usar el parámetro region
, que es una tupla con la estructura (X, Y, Ancho, Alto)
# Capturar solo una region de la pantalla captura_region = pyautogui.screenshot(region=(50, 50, 400, 300))
Instalación
Cuando queremos instalar paquetes de Python lo mejor es usar la herramienta pip
:
pip install pyautogui
Esta librería tiene algunas dependencias cuando trabajamos en Linux, lo mejor es instalarlas para su uso correcto.
- Dependencias en Linux: python3-xlib, scrot, python3-tk, python3-dev
- Dependencias en MacOS: pyobjc-core, pyobjc
Opción 2: Capturar imagen de la pantalla
AutoPy es una librería de automatización muy similar a PyAutoGUI, escrito en lenguaje C. Su API es un poco más simple y agradable al usuario que la de PyAutoGUI pero por ahora no soporta la versión 3 de Python, solo Python 2.x (por eso la presentamos como segunda opción).
También necesitamos solo 3 líneas de código para realizar una captura de pantalla con esta librería:
import autopy captura = autopy.bitmap.capture_screen() capture.save('captura.png')
Al igual que con la librería anterior, la función capture_screen()
, también puede capturar una región determinada de la pantalla, con la estructura ((X, Y), (Ancho, Alto))
.
captura_region = autopy.bitmap.capture_screen(((50, 50), (400, 300)))
Si queremos instalar esta librería, podemos encontrar el instalador de AutoPy en este enlace.
Para el resto de sistemas operativos, podemos utilizar el instalador de paquetes PIP:
pip install autopy
Otra opción es descargar el código fuente desde este enlace y ejecutar el comando:
python setup.py build python setup.py install
Opción 3: Capturar imagen de la pantalla
Si buscamos un módulo más especifico a la tarea que queremos realizar (hacer una captura de pantalla) podemos utilizar pyscreenshot, un módulo creado específicamente para llevar a cabo esta tarea, con soporte para las versiones 2 y 3 de Python.
Este módulo cuenta con solo una dependencia a PIL/Pillow. Además de unas dependencias en Linux como: scrot, ImageMagick, PyGTK/wxPython. En Mac OS X solo requiere Quartz o screencapture.
Ejemplo de uso:
imagen = pyscreenshot.grab() imagen.save('captura.png')
Esta función nos retorna un objeto PIL.Image.Image
. Al igual que con las otras librerías, podemos capturar una región especifica de la pantalla.
imagen = pyscreenshot.grab(bbox=(50, 50, 450, 350))
Tengamos en cuenta que la estructura de bbox
es (X1, Y1, X2, X2)
.
Podemos instalarlo como cualquier paquete de Python con PIP:
pip install pyscreenshot
Opción 4: Capturar pantallas con Python MSS
Python-MSS es un módulo bastante rápido, multiplataforma que sirve para tomar múltiples capturas de pantalla utilizando ctypes.
Dentro de las características de esta librería tenemos que:
- Uso básico, tomará una captura de pantalla por cada monitor o una captura de todos los monitores y la guardará en un archivo .PNG.
- Compatibilidad, puede usar los formatos admitidos por la librería PIL y se integra muy bien con Numpy y OpenCV.
- Integrabilidad, puede ser integrado facilmente en juegos y otro software que requiera métodos rápidos y multiplataforma para tomar capturas de pantalla.
- MSS, son las siglas de Multiple Screen Shots.
Instalación
Al ser una librería de Python tiene la facilidad de ser instalada con pip, el administrador de paquetes de Python.
$ pip install mss
O también pueden descargar su código fuente desde GitHub:
$ git clone https://github.com/BoboTiG/python-mss.git $ cd python-mss $ python setup.py install --user
Modo de uso
Para usar este módulo debemos importarlo, ya sea que estemos trabajando en un archivo .py o en el intérprete interactivo de Python:
from mss import mss # O dependiendo de nuestro sistema operativo # MacOS X from mss.darwin improt MSS as mss # GNU/Linux from mss.linux import MSS as mss # Microsoft Windows from mss.windows import MSS as mss
Ejemplos de uso
Para crear una instancia mss() se recomienda usar el constructor del módulo en una sentencia with:
from mss.linux import MSS as mss with mss(display=':0.0') as captura_pantallas: # resto de implementacion
Una captura de pantalla por monitor
Al crear nuestro objeto mss() podemos iterar a traves de su función .save(), la cual toma una captura de pantalla por cada monitor y crea un igual número de imágenes. Ejemplo:
from mss.linux import MSS as mss captura_pantallas = mss(display=':0.0') for nombre_archivo in captura_pantallas.save(): print(nombre_archivo)
monitor-1.png monitor-2.png
Capturar monitor principal
El módulo MSS reconocerá nuestro monitor principal automáticamente, así que cuando llamemos a la función mss.shot() tomará solo una captura en el monitro principal:
from mss.linux import MSS as mss captura_pantallas = mss(display=':0.0') nombre_archivo = captura_pantallas.shot() print(nombre_archivo)
monitor-1.png
Un screenshot para capturarlos a todos
La función shot() contiene argumentos que nos permiten especificar en cual monitor queremos realizar la captura, pero si pasamos ‘-1’ como parámetro para este argumento, seleccionará todos los monitores que reconozca y creará una imagen de todos. Ejemplo:
from mss.linux import MSS as mss captura_pantallas = mss(display=':0.0') pantalla_completa = captura_pantallas.shot(mon=-1, output='fullscreen.png) print(nombre_archivo)
Ola, me parecen muy buenas librerías pero no es lo que ando buscando, no se si sepas ó si existe alguna manera de tomar una captura de una ventana especifica que yo elija pero solo quiero como su render por decir así como lo hace OBS Studio que uno puede elejir ventanas visibles y tomar un render y mostrarlo como video.
Desde ya gracias!!