Cherchant à optimiser la production de mes captures d’écrans avec shutter je suis parti à la recherche d’un plugin utilisant un des outils de compression d’images au format PNG.

Shutter est le meilleur outil de capture d’écran disponible sous Linux et au merveille il est possible d’écrire ses propres plugins. Pour développer ses plugins nous avons le choix entre deux langages : du scripting shell ou du perl. Malheureusement pas de documentation disponible, mais heureusement quelques plugins sont pré-installés et utilisent ses deux langages.

Il suffit de se rendre dans le répertoire /usr/share/shutter/ressources/system/plugins.

Ici nous allons trouver deux sous-répertoires, shell et perl eux-mêmes remplis de sous-répertoires. Prenons l’exemple de sptrim :

###################################################
#
#  Copyright (C) 2008-2012 Mario Kemper  and Shutter Team
#
#  This file is part of Shutter.
#
#  Shutter is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 3 of the License, or
#  (at your option) any later version.
#
#  Shutter is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with Shutter; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
###################################################
 
TEXTDOMAIN=shutter-plugins
TEXTDOMAINDIR=$SHUTTER_INTL
PLUGIN_NAME=$"Autocrop"
PLUGIN_SORT=$"Tool"
PLUGIN_TIP=$"Remove empty borders from the image"
PLUGIN_EXT="image/png;image/bmp;image/jpeg"
 
if [[ "${1}" = "name" ]];then
   	echo "${PLUGIN_NAME}"
    exit 0
elif [[ "${1}" = "sort" ]];then
    echo "${PLUGIN_SORT}"
    exit 0
elif [[ "${1}" = "tip" ]];then
    echo "${PLUGIN_TIP}"
    exit 0
elif [[ "${1}" = "ext" ]];then
    echo "${PLUGIN_EXT}"
    exit 0
fi
 
FILE="${1}"
#WIDTH="${2}"
#HEIGHT="${3}"
#FILEYTPE="${4}"
#GEO="${2}x${3}"
 
convert "${FILE}" -trim +repage "${FILE}"
exit 0

Pas très difficile de comprendre le fonctionnement pour en écrire de nouveaux. Je vous propose donc d’écrire un nouveau plugin pour optimiser les images au format PNG en utilisant OptiPNG. Dans un premier temps créons le sous-répertoire optipng dans le répertoire shell et le fichier du plugin :

sudo mkdir -p  /usr/share/shutter/ressources/system/plugins/shell/optipng
sudo gedit  /usr/share/shutter/ressources/system/plugins/optipng/optipng

Collez-y le source ci-dessous :

###################################################
#
#  Copyright (C) 2015 stephane ROBERT
###################################################
 
#!/usr/bin/env bash
TEXTDOMAIN=shutter-plugins
TEXTDOMAINDIR=$SHUTTER_INTL
PLUGIN_NAME=$"OptiPNG Plugin"
PLUGIN_SORT=$"Recompress"
PLUGIN_TIP=$"OptiPNG est un optimiseur d'images au format PNG"
PLUGIN_EXT="image/png"
if [[ "${1}" = "name" ]];then
    echo "${PLUGIN_NAME}"
    exit 0
elif [[ "${1}" = "sort" ]];then
    echo "${PLUGIN_SORT}"
    exit 0
elif [[ "${1}" = "tip" ]];then
    echo "${PLUGIN_TIP}"
    exit 0
elif [[ "${1}" = "ext" ]];then
    echo "${PLUGIN_EXT}"
    exit 0
fi
FILE="${1}"
optipng -o8 "${FILE}"
exit 0

Avant de lancer shutter il faut bien sur installer optipng :

sudo apt-get install optipng

Attention il faudra arrêter shutter pour voir les modifications !

Rien de bien compliqué non ? J’en profite pour modifier le perl script d’ajout de filigrane en définissant la position du au sud-est et la taille du texte en fonction de la largeur de l’image. Pour cela éditons le fichier suivant :

sudo gedit /usr/share/shutter/resources/system/plugins/perl/spwatermark/spwatermark

Allez à la ligne 125 et modifier la valeur 4 à 8 :

$gravity_combo->set_active( 8 );

Dans le même ordre d’idée je vais modifier le texte et la taille du texte utilisé comme filigrane. Cette fois ça se passe à la ligne 95 et 112:

$caption_entry->set_text( "© %Y http://www.le-libriste.fr" );
$pointsize_sbutton->set_value( int ($width * 0.04) );

J’aurais beaucoup moins de manipulations à faire pour créer mes images à destination de mon blog 😉