Personnaliser vos images par lot

Publié
Commentaires Aucun

changer de format, redimensionner, marquer, vos images par lot et plus encore

Changer la taille, changer le format, mettre un copyright ©, exporter en niveaux de gris et bien d’autres actions sont depuis longtemps des travaux maîtrisés sur PC.

chat.jpg

Cependant cela devient vite lassant et chronophage d’avoir à apporter les mêmes modifications sur un lot d’images.
De nombreux logiciels souvent payants peuvent au prix de manipulations nécessitant une bonne expérience, réaliser cette tache.

Il existe cependant un programme qui peut faire cela en ligne de commande en un temps record et sans connaissance préalables du fonctionnement d’un logiciel graphique. Ainsi on va pouvoir par exemple créer un copie d’image en réduction de plusieurs centaines d’images en 1 click

Comme c’est en ligne de commande c’est facilement scriptable.

je vous propose ci dessous une ébauche de script, que vous pourrez compléter pour correspondre à vos besoins.

Le programme s’appuie sur convert qui est un outil du package imagemagick.

  • Pour installer le package imagemagick
apt-get install imagemagick

la page man de convert est très bien documentée pour vous indiquer toutes les options utilisables
vous trouverez aussi une documentation abondante sur Internet

http://linux.about.com/od/commands/l/blcmdl1_convert.htm
https://doc.ubuntu-fr.org/imagemagick
http://www.tux-planet.fr/imagemagick-manipuler-des-images-en-ligne-de-commande/
http://www.imagemagick.org/Usage/text/

Avec le programme ci dessous, il suffit d’indiquer une image ou une liste d’images en paramètre à l’aide d’un ou des jokers, et le script var redimensionner et inscrire un texte en haut à gauche de l’image, ou des images exportées. L’image originale n’est pas modifiée

  • Pour Utiliser le programme vous pouvez par exemple lancer :
./convert_image_txt.sh -m "/home/cajj/Téléchargements/cat-254572_640.jpg" -c red -t "pixabay.com" -r 300
  • Ce qui aura pour effet de redimensionner l’image cat-254572_640.jpg en 300 pixels de large avec le texte pixabay.com en rouge en haut à gauche et de l’exporter dans le même répertoire avec le nom cpcat-254572_640.jpg

petitchat.jpg

./convert_image_txt.sh -m "/media/cajj/OS/photos/plage/*.jpg"
  • Aura pour effet de créer une nouvelle copie de chaque image.jpg de répertoire /media/cajj/OS/photos/plage/ avec une largeur de 1024 pixels avec cajj.co incrit en blanc dans le coin supérieur gauche. Les nouvelles images seront écrites sous la forme cpimage.jpg

Le programme

code.jpg

#! /bin/bash

# pour lister les polices utilisables : convert -list font
# pour lister les couleurs utilisables : convert -list color
# pour voir toutes les options : man convert
# etc

insert="(c) cajj.co"
newsize="1024"
prefixe="cp"
pattern=""
filename=""
color="white"

if [ $# -eq 0 ]
then
 $0 -h
 exit 0
fi

while test $# -gt 0; do
        case "$1" in
                -h|--help)
                        echo "" 
			echo "Script pour redimentionner les images par lot "
                        echo "application [arguments]"
                        echo " "
                        echo "arguments:"
                        echo "-h   --help,        affiche l'aide"
                        echo "-m motif,           utilise motif comme motif de selection des fichiers à renommer"
                        echo "                    motif=nom ou partie de nom à rechercher (jpg, bmp, jpeg, *ko.jpg, tu*tu.jpg, toto*,  etc. -  le jocker * est accepté mais doit etre coté \"\" )"
                        echo "-t texte,           specifie un texte à incruster dans l'image"
                        echo "-c color,           specifie la couleur du texte à incruster dans l'image"
                        echo "-r size,            specifie une largeur de redimentionement de l'image de sortie"
                        echo "-p prefixe	  prefice= prefixe de nommage des fichiers redimmentionnés (ex : original=toto.jpg prefixe=aa sortie= aatoto.jpg)"
                        echo "			  prefixe supporte le chemin en plus du nom"
                        echo "script basé sur imagemagick"
                        exit 0
                        ;;
#texte à écrire sur la photo
                -t)
                        shift
                        if test $# -gt 0; then
                                insert=$1
                        else
                                insert=""
                        fi
                        shift
                        ;;
#couleur du texte
                -c)
                        shift
                        if test $# -gt 0; then
                                color=$1
                        else
                                color="white"
                        fi
                        shift
                        ;;
# motif de fichier à rechercher
                -m)
                        shift
                        if test $# -gt 0; 
			then
                          pattern=$1
                        else
                          echo "pas de motif de recherche spécifié"
                          exit 1
                        fi
                        shift
                        ;;
# taille de l'image finale
                -r)
                        shift
                        if test $# -gt 0; then
                                newsize=$1
                        else
                                newsize="1024"
                        fi
                        shift
                        ;;
                -p)
                        shift
                        if test $# -gt 0; then
                                prefixe=$1
                        else
                                echo "pas de préfixe spécifié"
                                exit 1
                        fi
                        shift
                        ;;
                *)
                        break
                        ;;
        esac
done

if [ -z "$pattern" ]
then
 echo "pas de motif de recherche spécifié"
 exit 1
fi

if [ -f "$pattern" ]
then
 filename=$(readlink -f $(echo "${pattern}") | head -n 1)
fi

path=$(dirname $(readlink -f $(echo "${pattern}") | head -n 1))"/"

rename=${path}${prefixe}${name}

echo "Nom complet   : "${path}${filename}
echo "chemin        : "${path}
echo "Nom à lister  : "${pattern}
echo "renommer en   : "${rename}
echo "redimention  : "${newsize}

for img in  $pattern
do
 toto=$(printf %q "$img")
 name=$(basename "$toto")
 echo "Ecriture de : ${path}${prefixe}${name}"
 convert $(printf %q "$img")  -resize $newsize -pointsize 26  -stroke $color -strokewidth 2 -fill yellow  -draw 'translate 10,50 rotate -10 text 10,10 '${insert}' ' ${path}${prefixe}${name}
done

Remarques :

  1. Ce programme est un exemple et une ébauche de script que vous pouvez réaliser. Veuillez prendre soin de faire des sauvegardes de vos fichiers avant de tester et/ou modifier ce script. cajj.co ne pourrait etre tenu responsable de quoi que ce soit provoqué par ce code
  2. Comme indiqué dans l’aide du programme, si la chaîne fournie pour les nom de fichiers à convertir contient des jokers (*) alors il faut indiquer la chaîne entre guillemets
  3. Le programme ne peut convertir les fichiers avec des noms contenant des caractères spéciaux (espace et autre)

Auteur

Commentaires

Commentaires fermés pour cet article.

← Plus anciens Plus récents →