¿Cómo puedo tomar una captura de pantalla desde una ventana, con márgenes personalizables?

17

Necesito una herramienta que haga lo siguiente: al seleccionar una ventana, haré una captura de pantalla de esa ventana con un relleno x , como en la siguiente imagen:

Entonces, en la mayoría de los casos, x será igual a y , pero a veces necesito distancias diferentes.

¿Cómo hacer una captura de pantalla así, automáticamente? Lo intenté con Shutter, pero no pude encontrar esa configuración allí. Sin embargo, es compatible con complementos. Entonces, un complemento podría ser recortar la ventana de esta manera.

Ionică Bizău
fuente
¿Puedo preguntar qué herramienta usaste para crear esa maqueta? Se ve bastante bien :)
Seth
1
¡Reglas de @Seth InkScape! No soy un experto, pero me gusta crear cosas como esta para mis proyectos. Se ve bien para los ojos. :-) Aquí está la versión PNG y la SVG . Este repositorio contiene otras cosas creadas con InkScape.
Ionică Bizău

Respuestas:

19

Script, usando Shutter

No creo que exista, pero como todo, se puede hacer.

Si hace que el script a continuación esté disponible bajo una combinación de teclas (explicación más abajo), aparecerá una ventana que le permitirá establecer los márgenes de su captura de pantalla a la izquierda, derecha, arriba y abajo , separados por un espacio:

ingrese la descripción de la imagen aquí

resultado:

ingrese la descripción de la imagen aquí

o:

ingrese la descripción de la imagen aquí

resultado:

ingrese la descripción de la imagen aquí

etc.

Establecí el valor predeterminado en 30 px, pero puedes establecer cualquier valor predeterminado (ver más abajo).

Cómo utilizar

  • El script usa Shuttery wmctrl. Suponiendo Shutterque ya está en su sistema (ya que lo mencionó), instale wmctrl:

    sudo apt-get install wmctrl
    

    Nota: si usa Kubuntu , Zenityno está instalado por defecto:

    sudo apt-get install zenity
    
  • Copie el script a continuación en un archivo vacío. Si lo desea, puede cambiar el margen "predeterminado" en la línea del script:

    `arg =`
    
  • guárdelo como custom_screenshot.py.

  • Agregue el script a una combinación de teclas de acceso directo: elija: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando:

    python3 /path/to/custom_screenshot.py
    

Nota

La secuencia de comandos se utiliza wmctrlpara determinar la posición de la ventana. Sin embargo, en diferentes administradores de ventanas, la salida del wmctrl -lGcomando muestra pequeñas diferencias en la posición y de la ventana. Estas diferencias se eliminan mediante el valor, establecido en la línea deviation=del script. El valor establecido actualmente (0) es apropiado para Unity y KDE.

El guión también es probado, y funciona bien en Xfcey Gnome, pero el valor que hay que cambiar entonces, como se explica en la sección de cabecera de la secuencia de comandos.

La secuencia de comandos

#!/usr/bin/env python3
import subprocess
import time

"""
On different window managers, the window geometry as output of wmctrl differs slightly.
The "deviation" should compensate these differences. Most likely appropriate (tested) settings:
Unity: 0, Gnome: -36, Xfce (Xubuntu): -26, KDE (Kubuntu): 0
"""
#---
deviation = 0
#---
get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
try:
    arg = get('zenity --entry --entry-text "30 30 30 30" --text "border left, right, top, bottom" --title "Screenshot margins"').strip().split()
except:
    pass
else:
    time.sleep(0.5)
    # frontmost window pos
    frontmost = [l.split()[4] for l in get("xprop -root").splitlines() if "ACTIVE_WINDOW(WINDOW)" in l][0].replace(",", "")
    frontmost = frontmost[:2]+"0"+frontmost[2:]
    f_data = [l.split() for l in get("wmctrl -lG").splitlines() if frontmost in l][0][2:6]
    # extent
    xt_data = get("xprop -id "+frontmost).split()
    xt_i = xt_data.index("_NET_FRAME_EXTENTS(CARDINAL)")
    xt = [int(n.replace(",", "")) for n in xt_data[xt_i+2:xt_i+6]]
    # set data for screenshot command
    x = str(int(f_data[0])-int(arg[0])-xt[0])
    y = str(int(f_data[1])-int(arg[2])-xt[2]+deviation)
    w = str(int(f_data[2])+int(arg[0])+int(arg[1])+xt[0]+xt[1])
    h = str(int(f_data[3])+int(arg[3])+int(arg[2])+xt[2]+xt[3])

    command = "shutter -s="+(",").join([x,y,w,h])+" -e"
    subprocess.call(["/bin/bash", "-c", command])
Jacob Vlijm
fuente
3
No creo que exista , ¡ahora existe! ¡Muchas gracias!
Ionică Bizău
1
@ IonicăBizău de nada! Gracias por la pregunta, fue divertido hacerlo. Hice una pequeña corrección en la explicación de la configuración predeterminada.
Jacob Vlijm
1
@ IonicăBizău encontró (y corrigió) un error en la geometría.
Jacob Vlijm
2
¡Lindo lindo lindo! Lo configuré como el comando que ejecuto cuando presiono el botón especial en mi portátil ASUS. :-)
Ionică Bizău
2

También puede usar la combinación de los botones Shift y PrtScr para tomar una captura de pantalla de un área específica con dimensiones definidas por el usuario.

Simplemente presione la combinación y use el cursor modificado (se vuelve similar a un signo más) para elegir el área para la captura de pantalla.

manishraj2011
fuente
Por lo general, no puedo controlar mis manos para establecer estos márgenes exactamente. :-) Pero +1 para este atajo, no lo sabía.
Ionică Bizău
2

Puede tomar capturas de pantalla con la scrotutilidad de captura de pantalla de línea de comandos:

scrot -s  

o

scrot -ub -d 5  

El segundo comando pone un borde alrededor de la ventana seleccionada, que tiene un ancho agradable en relación con el tamaño de la ventana. La -d 5opción significa retraso y le ofrece un retraso de 5 segundos para seleccionar la ventana que se mostrará en la captura de pantalla.

Instalar con esto:

sudo apt-get install scrot

Referencia: Manual de Ubuntu - scrot

Tim
fuente