Screenshot.sh pour réaliser des captures d'écran

baissaoui Messages postés 497 Date d'inscription jeudi 2 septembre 2021 Statut Webmaster Dernière intervention 22 mars 2024 - 21 juin 2022 à 13:20
Document initial créé par Jipicy

Capture d'écran


Présentation

Voilà un petit script basé sur les outils d'ImageMagic pour réaliser des captures d'écran (complètes ou partielles), avec en prime la création d'une copie de la capture "annotée", c'est à dire en y ajoutant un cadre et une annotation (la date pour être précis).

De plus il met en oeuvre aussi un petit utilitaire nommé Xdialog (création de boîte de dialogue toutes simples) vous offrant la possibilité de configurer quelques variables dudit script.

Prérequis



Note : Sous Gnome, il existe un équivalent à Xdialog qui s'appelle Zenity.
Il y a aussi Kdialog sous KDE.

Syntaxe

screenshot.sh [<setup>]

Utilisation

La toute première fois lancer le script avec le paramètre "setup" afin de configurer le répertoire de destination, le préfixe de vos captures ainsi que l'extension.
screenshot.sh setup
Une fois les variables définies, vous pourrez appeler simplement le script depuis la ligne de commande, ou bien depuis un "lanceur" sur votre bureau ou encore dans la barre des tâches.

Une première boîte de dialogue (facultative) vous informera qu'après sa fermeture vous aurez un délai de 3 secondes (paramétrable dans le script) pour choisir le bureau sur lequel doit être fait la capture.

À l'apparition du curseur d'ImageMagic (en forme de croix), faite un clic sur la fenêtre devant être capturée (ou le bureau) ou bien dessiner à l'aide de la croix un carré ou un rectangle (en faisant glisser votre souris tout en maintenant le clic gauche) et relâcher une fois arrivé à destination.

Une image et son double annotée seront créées dans le répertoire défini lors du setup.

Vous pouvez redéfinir la configuration à tout moment en relançant le "setup", ou en modifiant les variables à la main.

Code source

#! /bin/bash

# @(#)
# @(#) screenshot 17/06/2007
# @(#) version 0.1 - auteur : JP
# @(#)
# @(#) screenshot est un petit programme de capture d'écran basé sur
# @(#) ImageMagic et faisant appel à Xdialog
# @(#)
# @(#) Usage : screenshot [< setup >]
# @(#)

### Fonction setup ###
function setup {

# Effacement des valeurs avant initialisation
sed -i '/^#A$/,/^#Z$/ s|^REPERTOIRE=.*|REPERTOIRE=|' $0
sed -i '/^#A$/,/^#Z$/ s|^NOM_IMAGE=.*|NOM_IMAGE=|' $0
sed -i '/^#A$/,/^#Z$/ s|^EXT=.*|EXT=|' $0

# Choix répertoire
REPERTOIRE=$(Xdialog --stdout --title "Répertoire" --dselect "$HOME" 0 0)
#Récupération du code retour
RETVAL="$?"
# Test variable vide. Si oui initialisation valeur par défaut
if [ -z "${REPERTOIRE}" ]
then REPERTOIRE="${HOME}/"
fi
# Test code retour Xdialog (voir doc Xdialog pour + d'info)
#+ Avec un code égal à 0 on initialise la variable REPERTOIRE avec la valeur fournie
#++ Dans tous les autres cas elle est initialisée à la valeur par défaut ($HOME)
case "$RETVAL" in
0) sed -i "/^#A$/,/^#Z$/ s|REPERTOIRE=|&\"${REPERTOIRE}\"|" $0
mkdir -p "$REPERTOIRE";;
  • ) Xdialog --title "Annulation" --msgbox "\nLe répertoire par défaut\n\n$HOME\n\n\ sera utilisé...\n" 10 50 sed -i "/^#A$/,/^#Z$/ s|REPERTOIRE=|&\"$HOME/\"|" $0;;esac# Choix nomNOM_IMAGE=$(Xdialog --stdout --title "Nom d'image" \ --inputbox "Entrez un nom de référence pour les images" 0 0)RETVAL="$?"if [ -z "${NOM_IMAGE}" ]then NOM_IMAGE="capture"ficase "$RETVAL" in0) sed -i "/^#A$/,/^#Z$/ s/NOM_IMAGE=/&\"${NOM_IMAGE}\"/" $0;;*) Xdialog --title "Annulation" --msgbox "\nLe nom générique par défaut\n\ncapture\n\n\ sera utilisé...\n" 10 50 sed -i "/^#A$/,/^#Z$/ s/NOM_IMAGE=/&\"capture\"/" $0;;esac# Choix extensionXdialog --no-tags --radiolist "Type d'extension" 0 0 7 \ ".png" "png - Portable Network Graphic" on \ ".jpg" "jpg ou jpeg - Joint Photographic Experts Group" off \ ".gif" "gif - Graphic Interchange Format" off \ ".bmp" "bmp - BitMaP" off \ ".tif" "tif ou tiff - Tag(ged) Image File Format" off 2>/tmp/radiolist.tmp.$$RETVAL=$?EXT=$(cat /tmp/radiolist.tmp.$$)rm -f /tmp/radiolist.tmp.$$case $RETVAL in0) sed -i.4.bak "/^#A$/,/^#Z$/ s/EXT=/&\"${EXT}\"/" $0;;*) Xdialog --title "Annulation" --msgbox "\nL'extension générique par défaut\n\npng\n\n\ sera utilisée...\n" 10 50 sed -i.5.bak "/^#A$/,/^#Z$/ s/EXT=/&\"\.png\"/" $0;;esacXdialog --title "Setup" --msgbox "\nLes paramètres de configuration suivant ont été mis à jour :\ \n\nREPERTOIRE = ${REPERTOIRE}\ \nNom = ${NOM_IMAGE}\ \nExtension = ${EXT}\ \n\nVeuillez relancer le script s'il vous plaît...\ \n\n" 0 0# Le setup est fini, on quitte le scriptexit}# Test de l'existence d'un paramètre (setup)if [ -n "$1" ]then case "$1" in setup) setup # Paramètre présent, on lance la fonction ;; *) Xdialog --title "Erreur" --msgbox "\nLe script ne prend qu'un paramètre\ \nen option.\n\nUsage : screenshot < setup >\n" 0 0 exit ;; esacfi# On supprime la fonction de la mémoireunset setup### Déclaration des variables (après lancement du setup)#AREPERTOIRE=NOM_IMAGE=EXT=#Z# Test de l'existence d'un fichier contenant la valeur de la variable ${NOM_IMAGE}#+ Si la condition est vraie alors on extrait le numéro du compteur#++ afin d'incrémenter le compteur ($COUNT) d'un pasif [ -e $(ls "${REPERTOIRE}" | egrep \b${NOM_IMAGE}) ]thenNUM=$(ls ${REPERTOIRE} | egrep "\b${NOM_IMAGE}" | sed 's/[^0-9]*//g'| sort -nr | sed 1q)COUNT=$(expr ${NUM} + 1)fi# Boîte de dialogue d'aide à l'ouverture - Facultatif -/usr/bin/Xdialog --title "Screenshot"\ --msgbox "Vous aurez 3 secondes après la fermeture de cette fenêtre\n\ pour choisir le bureau, ou la fenêtre à mettre en avant-plan\n\ pour réaliser votre capture d'écran."\ 0 0# Commande proprement dite pour la capture, avec un temps de latence de 3 secondesimport -pause 3 ${REPERTOIRE}${NOM_IMAGE}${COUNT}${EXT}# Création d'un clône de l'image en y insérant un cadre et une annotation extérieure#+ Épaisseur du cadre / Couleur du fond / Couleur du texte / taille du texte / Emplacement#++ Label (ici la date reformatée)/ Fichier original / Fichier de sortiemontage -frame 5 -mattecolor black -fill white -pointsize 14 -geometry +0+0 \ -label "$(date '+%A %e %B %Y %H:%M:%S')" ${REPERTOIRE}${NOM_IMAGE}${COUNT}${EXT} ${REPERTOIRE}${NOM_IMAGE}_annote${COUNT}${EXT}

Screenshots

  • Capture partielle

  • Capture partielle annotée

  • Capture partielle
  • Capture partielle annotée

Liens

  • ImageMagick - Manipuler les images en ligne de commande



Toutes critiques et améliorations sont les bienvenues...