web-dev-qa-db-fra.com

Comment puis-je prendre une capture d'écran depuis une fenêtre, avec des marges personnalisables

J'ai besoin d'un outil qui fera ce qui suit: en sélectionnant une fenêtre, on réalisera une capture d'écran de cette fenêtre avec un padding x, comme dans l'image suivante:

Ainsi, dans la plupart des cas, x sera égal à y, mais il me faut parfois des distances différentes.

Comment faire une telle capture d'écran, automatiquement? J'ai essayé avec Shutter, mais je ne pouvais pas trouver un tel réglage là-bas. Cependant, il supporte les plugins. Donc, un plugin pourrait être de rogner la fenêtre de cette façon.

17
Ionică Bizău

Script à l'aide de l'obturateur

Je ne pense pas que ça existe, mais comme n'importe quoi, ça peut être fait.

Si vous rendez le script ci-dessous disponible sous une combinaison de touches (explication complémentaire ci-dessous), une fenêtre s’ouvrira, vous permettant de définir les marges de votre capture d’écran sur le champ gauche, droite, haut et en bas, séparé par un espace:

enter image description here

résultat:

enter image description here

ou:

enter image description here

résultat:

enter image description here

etc.

Je règle la valeur par défaut sur 30 px, mais vous pouvez définir n’importe quelle valeur par défaut (voir ci-dessous).

Comment utiliser

  • Le script utilise Shutter et wmctrl. En supposant que Shutter soit déjà sur votre système (puisque vous l'avez mentionné), installez wmctrl:

    Sudo apt-get install wmctrl
    

    N.B. Si vous utilisez Kubunt, Zenity n'est pas installé par défaut:

    Sudo apt-get install zenity
    
  • Copiez le script ci-dessous dans un fichier vide. Si vous le souhaitez, vous pouvez modifier la marge "par défaut" dans la ligne du script:

    `arg =`
    
  • enregistrez-le sous custom_screenshot.py.

  • Ajoutez le script à une combinaison de raccourci clavier: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    python3 /path/to/custom_screenshot.py
    

Remarque

Le script utilise wmctrl pour déterminer la position de la fenêtre. Cependant, sur différents gestionnaires de fenêtres, la sortie de la commande wmctrl -lG montre de petites différences dans la position y de la fenêtre. Ces différences sont éliminées par la valeur définie dans la ligne deviation= du script. La valeur actuellement définie (0) est appropriée pour Unity et KDE.

Le script est également testé et fonctionne parfaitement sur Xfce et Gnome, mais la valeur doit ensuite être modifiée, comme expliqué dans la section head du script.

Le scénario

#!/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])
19
Jacob Vlijm

Vous pouvez prendre des captures d'écran avec l'utilitaire de capture d'écran en ligne de commande scrot:

scrot -s  

ou

scrot -ub -d 5  

La deuxième commande place une bordure autour de la fenêtre sélectionnée, qui a une largeur de Nice par rapport à la taille de la fenêtre. L'option -d 5 indique un délai et vous donne un délai de 5 secondes pour sélectionner la fenêtre à afficher dans la capture d'écran.

Installer avec ceci:

Sudo apt-get install scrot

Référence: Manuel Ubuntu - scrot

2
user354822

Vous pouvez également utiliser une combinaison de Shift et PrtScr boutons pour prendre une capture d'écran d'une zone spécifique avec des dimensions définies par l'utilisateur.

Appuyez simplement sur la combinaison et utilisez le curseur modifié (il devient semblable à un signe plus) pour choisir la zone de capture d'écran.

2
manishraj2011