[Mis à jour le 17/04 pour le bug cité #4]
[Mis à jour le 19/04 : V2 : taille de texte en proportion à l'image]
[Mis à jour le 25/04 : V3 : Avec barre de progression]
[Mis à jour le 17/06 : V6 : Avec texte vertical, compression et redimentionnement]
Si vous voulez appliquer un texte en filigrane sur un lot de photo on peut utilisé un script nautilus.
Le script utilise zenity et imagemagick
sudo apt-get install zenity imagemagick
Enregistrer le code suivent dans un éditeur de texte :
#!/bin/bash
## auteur : john5168
## dépendance : zenity ; imagemagick
## version : 6
# Change le séparateur standard (espace) pour RETURN
IFS='
'
taille=14 # 0 = grand <=> infini = petit
position=30 # 0 = long du bord <=> infini = proche du bord
contour=400 # 0 = gros contour de texte <=> infini = faible contour de texte
interligne=15 # 0 = grand interligne <=> infini = faible interligne pour texte vertical
folder_ok="false"
# Sélection des photo dans nautilus
folder="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
# Variable de la barre de progression
NB_PHOTOS=$(find $folder -iname '*.jpg' -o -iname '*.jpeg' | wc -l)
COMPTEUR=0
# Séléction d'action
RET=`zenity --list --checklist --width=450 --height=250 \
--title "Action à définir pour les photos" \
--column="" --column "Liste des actions" \
TRUE "Filigrane horizontal" \
FALSE "Filigrane vertical à gauche" \
FALSE "Filigrane vertical à droit" \
FALSE "Redimentionnement réduction de la taille des photos" \
FALSE "Compression jpg"`
if [ "$?" != "1" ]
then
if echo "$RET" | grep "Filigrane horizontal"; then
Horiz=`zenity --entry --text="Texte en filigrane horizontal" --entry-text="Texte horizontal"`|| exit 1
fi
if echo "$RET" | grep "Filigrane vertical à gauche"; then
VertG=`zenity --entry --text="Texte en filigrane vertical à gauche
Utilisé le caractère \ pour les espaces et
un espace entre chaque caractères" --entry-text="T e x t e \ G a u c h e"`|| exit 1
fi
if echo "$RET" | grep "Filigrane vertical à droit"; then
VertD=`zenity --entry --text="Texte en filigrane vertical à droite
Utilisé le caractère \ pour les espaces et
un espace entre chaque caractères" --entry-text="T e x t e \ D r o i t e"`|| exit 1
fi
if echo "$RET" | grep "Redimentionnement réduction de la taille des photos"; then
Red=`zenity --entry --text="Facteur de réduction des photos en %" --entry-text="50%"`|| exit 1
fi
if echo "$RET" | grep "Compression jpg"; then
Comp=`zenity --entry --text="Facteur de compression des photos en %
100% = pas de compression" --entry-text="60"`|| exit 1
fi
# Sélection du dossier ou sont copier les photos
ficsrc=`zenity --file-selection --directory "Choix du repertoire "`
if [ "$?" != "1" ]
then
echo "repertoire choisi " $ficsrc
# Vérification de l'éxistance du dossier de destination
if [ ! -x $ficsrc/${folder##*/} ]
then
folder_ok="true"
else
zenity --question --title "Attention" --text "Le fichier que vous avez sélectionné : \n ${folder##*/} \n Existe déjà dans : \n $ficsrc \n \n Êtes-vous sur de vouloir l'écraser ?"
if [ "$?" != "1" ]
then
folder_ok="true"
else
echo "Le fichier sélectionné existe déjà"
fi
fi
# Ok pour copie avec écrasement
if [ "$folder_ok" = "true" ]
then
# copie du dossier source
(cp -r $folder $ficsrc
# Calcule du nombre de caractère dans les textes verticals
nbVG=$(echo "scale=9; (`echo $VertG | wc -c` / 2)" | bc)
nbVD=$(echo "scale=9; (`echo $VertD | wc -c` / 2)" | bc)
# Boucle traitement des photos
IFS=$'\n' && for i in $(find $ficsrc/${folder##*/} -iname '*.jpg' -o -iname '*.jpeg');do
IFS=$' \n\t'
# Détection de la hauteur et largeur
l=`identify -format "%w" "$i"`
h=`identify -format "%h" "$i"`
# Calcul de la taille du texte en fonction de l'oriantation et le taille de l'immage
if [ "$l" -lt "$h" ]
then
tl=$(echo "scale=9; ($l / $taille)" | bc)
pos=$(echo "scale=9; ($l / $position)" | bc)
ct=$(echo "scale=9; ($l / $contour)" | bc)
int=$(echo "scale=9; ($l / $interligne)" | bc)
else
tl=$(echo "scale=9; ($h / $taille)" | bc)
pos=$(echo "scale=9; ($h / $position)" | bc)
ct=$(echo "scale=9; ($h / $contour)" | bc)
int=$(echo "scale=9; ($h / $interligne)" | bc)
fi
if echo "$RET" | grep "Filigrane horizontal"; then
mogrify -gravity south -font Bookman-DemiItalic -pointsize $tl \
-fill '#000000b6' -stroke '#eeeeee50' -strokewidth $ct \
-annotate +0+$pos "$Horiz" "$i"
fi
if echo "$RET" | grep "Filigrane vertical à gauche"; then
cent=$(echo "scale=9; (($h - ($nbVG * $tl)) / 2)" | bc)
mogrify -gravity northwest -font Bookman-DemiItalic \
-pointsize $tl -fill '#000000b6' -stroke '#eeeeee50' -strokewidth $ct \
`y=$cent;for x in $VertG; do echo -annotate +$pos+$y $x; y=$(echo "scale=9; ($y + $int)" | bc);done` "$i"
fi
if echo "$RET" | grep "Filigrane vertical à droit"; then
cent=$(echo "scale=9; (($h - ($nbVD * $tl)) / 2)" | bc)
mogrify -gravity northeast -font Bookman-DemiItalic \
-pointsize $tl -fill '#000000b6' -stroke '#eeeeee50' -strokewidth $ct \
`y=$cent;for x in $VertD; do echo -annotate +$pos+$y $x; y=$(echo "scale=9; ($y + $int)" | bc);done` "$i"
fi
if echo "$RET" | grep "Redimentionnement réduction de la taille des photos"; then
# Reduction de la taille de la photo
# 50% = 1/2 ; 25% = 1/4 de la taille d'origine
mogrify -resize $Red "$i"
fi
if echo "$RET" | grep "Compression jpg"; then
# Niveau de compression : 0 (qualité d’image la plus mauvaise et la plus compressée)
# à 100 (meilleure qualité mais compression moins efficace)
mogrify -compress JPEG -quality $Comp "$i"
fi
# faire le calcul du pourcentage, puis envoyer le résultat dans le tube.
COMPTEUR=$((COMPTEUR + 100))
echo $((COMPTEUR / NB_PHOTOS))
done ) | zenity --progress --auto-close || exit 1
fi
else
echo "pas de repertoire choisi"
fi
else
echo "Pas de choix de traitement de photo"
fi
## gravity = southeast (bas à droite) ; south (bas centré) ; southwest (bas à gauche)
## NorthWest, North, NorthEast, West, Center, East, SouthWest, South, ou SouthEast
## fill = couleur du texte
## en rba noir = 000000 et opaque =00 invisible = ee
## blanc = eeeeee
## stroke = couleur du contour du texte
## en rba noir = 000000 et opaque =00 invisible = ee
## blanc = eeeeee
## font = police du texte
## annotate position +x+y et contenu du texte
sauvez sous ~/.gnome2/nautilus-scripts/filigrane
lancez la commande suivante pour rendre le script exécutable :
chmod +x ~/.gnome2/nautilus-scripts/filigrane
Mise à jour
J'ai modifier le script pour pouvoir l'utilisé dans les chemins qui contient des espaces.
Donc les postes #2 et #3 non plus d'intérêt, merci a biginoz pour son lien. J'ai repris une partie du code qui est dans sont lien.
Le texte du filigrane est maintenant proportionnel à la taille de la photo [V2].
Une barre de progression s'affiche pour savoir ou en ai le travail du script [V3]
Une liste de choix apparais au lancement du script pour le filigrane en horizontal, vertical, compression et redimentionnement des photos [V6]
Usage
Dans Nautilus vous sectionnez le dossier contenant les photos au format "*.jpg" ou "*.jpeg", clique droit puis >Script>filigrane
Cela vous demande un dossier de destination puis crée un dossier identique au dossier que vous avez sélectionné et copie toute les photos du dossier sélectionné dans le dossier choisis en appliquant les actions que vous aurais choisi dedans.
Il est possible de modifié la position, la couleur, la taille, etc... du texte en modifiant les paramètres comme indiqué dans les commentaires du script.
ATTENTION
Pour que cela fonctionne il faux sélectionné un seul dossier à la fois.