Screenshot.sh

Décembre 2016


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 nom
NOM_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"
fi
case "$RETVAL" in
0)	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 extension
Xdialog --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 in
0)	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;;
esac

Xdialog --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 script
exit
}

# 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
			;;
	esac
fi

# On supprime la fonction de la mémoire
unset setup

### Déclaration des variables (après lancement du setup)
#A
REPERTOIRE=
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 pas
if [ -e $(ls "${REPERTOIRE}" | egrep \b${NOM_IMAGE}) ]
then
NUM=$(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 secondes
import -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 sortie
montage -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




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

A voir également :

Ce document intitulé «  Screenshot.sh  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.