Je souhaitais publier un ensemble de photos sur La Rochelle sur un site Web et pour plus d’homogénéité je voulais redimensionner celles-ci (1024 pixels de largeur) et ajouter le logo de la ville de la Rochelle.
Comme il s’agissait d’une très grand nombre d’images j’ai automatisé ce processus en utilisant l’outil open-source Imagemagick . Cet outil est disponible gratuitement sur toutes les plateformes Linux, Windows, Mac Os X, iOS.
Pour notre test on va utiliser l’image de départ suivante

La première étape va consister à redimensionner cette image à la largeur souhaitée sans déformer celle-ci (le ration largeur / hauteur doit rester constant) . les règles de géométrie applicables avec l’outil imagemagick convert sont très complètes
Pour mon besoin je vais uniquement indiquer la largeur de l’image souhaitée avec le qualifier -resize 1024
$ convert -verbose -resize 1024 port_de_l_rochelle.jpg port_de_l_rochelle.jpg_1024.jpg port_de_l_rochelle.jpg JPEG 5312x2988 5312x2988+0+0 8-bit sRGB 1.85MB 0.120u 0:00.129 port_de_l_rochelle.jpg=>port_de_l_rochelle.jpg_1024.jpg JPEG 5312x2988=>1024x576 1024x576+0+0 8-bit sRGB 188KB 1.140u 0:00.309 $
Pour la deuxième étape je vais faire de même avec le logo une taille de 100×100 est acceptable et n’occupera pas trop de place
$convert -verbose -resize 100 Logo_ville_la_rochelle.svg.png logo_la_rochelle_100.png

Le logo choisi est au format PNG car il permet de préserver une partie transparente ou semi-transparente d’une partie de l’image et donc venir naturellement s’insérer en sur-impression sur l’image existante.
Maintenant je souhaite afficher le logo sur mon image en fabriquant une image composite (au fond l’image du port et au dessus le logo. Le qualifier -composite réalise cette fonction.
Il va être nécessaire d’indiquer à l’outil convert où positionner le logo dans l’image (au centre , en bas, en bas à droite) . pour cela le qualifier -gravity est fait pour cela; Les options sont les suivantes:
$ convert -list gravity None Center East Forget NorthEast North NorthWest SouthEast South SouthWest West
Si l’on choisit l’option -gravity Center le résultat sera le suivant :
$ convert -verbose port_de_l_rochelle.jpg_1024.jpg logo_la_rochelle_100.png -gravity Center -composite port_de_l_rochelle.jpg_1024_logoC.jpg port_de_l_rochelle.jpg_1024.jpg JPEG 1024x576 1024x576+0+0 8-bit sRGB 188KB 0.010u 0:00.010 logo_la_rochelle_100.png PNG 100x100 100x100+0+0 8-bit sRGB 2.78KB 0.000u 0:00.000 port_de_l_rochelle.jpg_1024.jpg=>port_de_l_rochelle.jpg_1024_logoC.jpg JPEG 1024x576 1024x576+0+0 8-bit sRGB 188KB 0.030u 0:00.019

Bien sûr ce résultat n’est pas idéal, il est nécessaire de positionner le logi en bas à droite avec l’option -gravity SouthEast
Le résultat final est obtenu par la commande:
$ convert -verbose port_de_l_rochelle.jpg_1024.jpg logo_la_rochelle_100.png -gravity SouthEast -composite port_de_l_rochelle.jpg_1024_logoSE.jpg port_de_l_rochelle.jpg_1024.jpg JPEG 1024x576 1024x576+0+0 8-bit sRGB 188KB 0.000u 0:00.019 logo_la_rochelle_100.png PNG 100x100 100x100+0+0 8-bit sRGB 2.78KB 0.000u 0:00.000 port_de_l_rochelle.jpg_1024.jpg=>port_de_l_rochelle.jpg_1024_logoSE.jpg JPEG 1024x576 1024x576+0+0 8-bit sRGB 189KB 0.040u 0:00.019

Mon processus de conversion des photographies peut être maintenant automatisé pour traiter un grand nombre d’images dans un script qui fait à la fois le redimensionnement et l’incrustation du logo dans les images.
J’ai publié sur github les sources d’un script bash permettant de traiter d’un seul coup tout un répertoire de photos de réduire la taille et d’insérer un logo.
#!/bin/bash # # Resize4Web -- Traite un répertoire d'images et insère un logo # # History # 2018-03_03 - Création echo "*** Resize4Web ***" # Usage display_usage() { echo " " echo "Ce script doit avoir moins 1 argument" echo "1 - Répertoire de travail de départ où ont été déchargée les images non traitées" echo "2 - largeur en pixels" echo "3 - chemin du fichier Logo à inserer (optionnel)" echo " " echo "\nUsage:\n$0 [arguments] \n" } # if less than 1 arguments supplied, display usage if [ $# -le 1 ] then display_usage exit 1 fi # 00 - Lancement echo "* Repertoire de travail de départ = $1" cd $1 # # 1- Création du repertoire de destination mkdir web1024 # 2 - Boucle de traitement # Pour chaque fichier jpg de moins d'une heure faire echo du nom for line in $(find . -iname '*.jpg'); do echo "New file " echo $line convert -verbose -resize $2 $line web1024/$line done # Insertion du logo # Tester si le fichier logo existe if [ -f "$3" ] then echo "Le fichier logo "+$3+" existe" else echo "******* ATTENTION ********* Le fichier logo passé en paramètre n'exite pas" echo "*********** Les fichiers traités se trouvent dans le répertoire = "`pwd` exit 1 fi if [ -n "$3" ]; then echo "*** Insertion Un logo passé en paramètre 3: "+$3 for line in $(find ./web1024 -iname '*.jpg'); do echo "New file " echo $line convert -verbose $line $3 -gravity SouthEast -composite $line done fi # Retour à mon répertoire racine echo "*********** Les fichiers traités se trouvent dans le répertoire = "`pwd` cd ~ # Fin exit 0