Comment puis-je faire une capture d'écran à partir d'une fenêtre, avec des marges personnalisables

17

J'ai besoin d'un outil qui fera ce qui suit: sélectionner une fenêtre, fera une capture d'écran de cette fenêtre avec un remplissage x , comme dans l'image suivante:

Donc, dans la plupart des cas x sera égal à y , mais parfois j'ai besoin de distances différentes.

Comment faire une telle capture d'écran, automatiquement? J'ai essayé avec Shutter, mais je n'ai pas pu trouver un tel paramètre là-bas. Cependant, il prend en charge les plugins. Un plugin pourrait donc être de recadrer la fenêtre de cette façon.

Ionică Bizău
la source
Puis-je demander quel outil vous avez utilisé pour créer cette maquette? Ça a l'air plutôt sympa :)
Seth
1
@Seth InkScape règles! Je ne suis pas un expert, mais j'aime créer des trucs comme ça pour mes projets. Ça a l'air bien pour les yeux. :-) Voici la version PNG et la version SVG . Ce référentiel contient d'autres éléments créés avec InkScape.
Ionică Bizău

Réponses:

19

Script, à l'aide de Shutter

Je ne pense pas que cela existe, mais comme tout, cela peut être fait.

Si vous rendez le script ci-dessous disponible sous une combinaison de touches (explication plus loin ci-dessous), une fenêtre apparaîtra, vous permettant de définir les marges de votre capture d'écran à gauche, à droite, en haut et en bas , séparées par un espace:

entrez la description de l'image ici

résultat:

entrez la description de l'image ici

ou:

entrez la description de l'image ici

résultat:

entrez la description de l'image ici

etc.

J'ai défini la valeur par défaut à 30 px, mais vous pouvez définir n'importe quelle valeur par défaut (voir ci-dessous).

Comment utiliser

  • Le script utilise Shutteret wmctrl. En supposant qu'il Shutterest déjà sur votre système (puisque vous l'avez mentionné), installez wmctrl:

    sudo apt-get install wmctrl
    

    NB Si vous utilisez Kubuntu , Zenityn'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 raccourcis 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 wmctrlpour déterminer la position de la fenêtre. Sur différents gestionnaires de fenêtres cependant, la sortie de la wmctrl -lGcommande montre de petites différences dans la position y de la fenêtre. Ces différences sont éliminées par la valeur fixée dans ledeviation= ligne du script. La valeur actuellement définie (0) est appropriée pour Unity et KDE.

Le script est également testé et fonctionne très bien sur XfceetGnome , mais la valeur doit être modifiée ensuite, comme expliqué dans la section head du script.

Le script

#!/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
la source
3
Je ne pense pas que ça existe - maintenant ça existe! Merci beaucoup!
Ionică Bizău
1
@ IonicăBizău vous êtes les bienvenus! Merci pour la question, c'était amusant à faire. J'ai fait une petite correction sur l'explication du paramètre par défaut.
Jacob Vlijm
1
@ IonicăBizău a trouvé (et corrigé) un bug dans la géométrie.
Jacob Vlijm
2
Bien bien bien! Je l'ai défini comme la commande que j'exécute lorsque j'appuie sur le bouton spécial de mon ordinateur portable ASUS. :-)
Ionică Bizău
2

Vous pouvez également utiliser une combinaison de boutons Shift et PrtScr 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 similaire à un signe plus) pour choisir la zone de capture d'écran.

manishraj2011
la source
Habituellement, je ne peux pas contrôler mes mains pour définir ces marges exactement. :-) Mais +1 pour ce raccourci, je ne le savais pas.
Ionică Bizău
2

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

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 belle largeur par rapport à la taille de la fenêtre. L' -d 5option représente le délai et vous donne un délai de 5 secondes pour sélectionner la fenêtre à être dans la capture d'écran.

Installez avec ceci:

sudo apt-get install scrot

Référence: Manuel Ubuntu - scrot

Tim
la source