Script sans prétention, fait par un amateur pour s'initier au bash !
Il fonctionne mais demanderait beaucoup de corrections de la part de pros.
A tester dans un dossier dans lequel on aura copié les originaux.
Il fonctionne mais demanderait beaucoup de corrections de la part de pros.
A tester dans un dossier dans lequel on aura copié les originaux.
#!/bin/sh # photon v0.53 2004-2006 GPL Guy Passail # script à déposer dant un répertoire accessible au "PATH" (ex: ~HOME/bin) et à invoquer dans le répertoire des images à modifier! # nécessite l'installation des programmes "Imagemagick" et "igal" (uniquement pour publication internet) # awk est pré-requis # pour simplement tester le script en toute sécurité, le programme crée un sous-dossier "ori". # ligne suivante à commenter une fois les tests effectués [ -d ori ] && rm *.jpg ; cp ori/*.jpg . || mkdir ori ; cp ./*.jpg ori ### définition des variables modifiables à la demande ### #format de date: dt1=`date +%Y%m%d` # aaaammjj #dt1=`date +%y%m%d` # aammjj # chaine de caractères à supprimer par défaut: pas actif! #chaine1='tech00' # défaut de l'appareil photo # taille de l'image par défaut: taille1='500' # pour affichage internet ### signature texte # cf convert dans fonction sign #sig="GP" # texte de la signature sig="%[EXIF:DateTimeOriginal]" # affichage date EXIF #sig="$dt1" #sig=`date '+%A %d/%m/%Y'` # vendredi 24/09/2004 #sig="27/06/04" fon="/usr/X11R6/lib/X11/fonts/TTF/Enviro.TTF" # choix de la fonte fon="/usr/X11R6/lib/X11/fonts/TTF/luxisri.ttf" # choix de la fonte cou="red" # couleur des caractères poi=15 # taille de la signature texte pos1="10,20" # 10,20 position de la signature texte ### signature logo # cf composite dans fonction sign pos2="+10+25" # +10+10 position du logo sima="/home/guy/logo1.png" # image/logo watermark #options d'igal iga="-n -w 7 -d html" #iga="-n -w 7 -d html --bigy 500" # pour 3 tailles dont ori #iga="-s -w 7 -d html" # unique page d'index= le plus basique bar='-------------------------------------------------------------------' #supprime * après jpg! chmod -x *.jpg #### définition des fonctions### #### fonctions menu ### function menu () { #[ -e liste_des_images.txt ] && rm -f liste_des_images.txt rep=`pwd` # répertoire bas=`basename $rep` clear echo echo -n " Voici le menu concernant les images JPEG du dossier \"$bas\": * vérifier le format des images .............. (1) * renommer l'ensemble des images de ce dossier (2) * réduire la taille des images ............... (3) * signer ses images .......................... (4) * créer un dossier HTML ...................... (5) * renommer et retailler les images .(2)+(3).. (6) * retailler et créer un dossier HTML (3)+(4).. (7) * quitter .................................... (8) -> votre réponse: " read reponse until [ "$reponse" = 1 -o "$reponse" = 2 -o "$reponse" = 3 -o "$reponse" = 4 -o "$reponse" = 5 -o "$reponse" = 6 -o "$reponse" = 7 -o "$reponse" = 8 ] #until [ "$reponse" = "{ 1,2,3,4,5,6,7,8 }*" ] do echo "Réponse invalide: \"$reponse\", tapez \"1 2 3 4 5 6 7 ou 8\" " read reponse done #clear case $reponse in 1) ident ; menu ;; 2) renom ; menu ;; 3) conv ; menu ;; 4) sign ; menu ;; 5) html ; menu ;; 6) renom ; conv ; menu ;; 7) conv ; html ; menu ;; 8) [ -d tmp ] && rm -rf tmp ### 5 lignes suivantes à commenter/supprimer dans version de production après les test ### #cd .. cd $rep [ -d html ] && rm -rf html [ -d $dos ] && rm -rf $dos [ -d $nom ] && mv $nom test cd test clear ; exit 0 ;; esac } #### fonction ident ### function ident () { clear [ -e ident_images ] && rm ident_images #touch liste_images #echo "Utiliser \"Flèche / Bas\" pour voir la suite ou \"Q\" pour continuer le programme">> liste_images #echo "Taper \"Q\" pour continuer" >> liste_des_images #echo ${bar} >> liste_images for f in *.jpg do identify $f >> ident_images #echo ${bar} >> ident_images done clear cat ident_images #sleep 5 [ -e ident_images ] && rm ident_images } #### fonctions renom ### function renom () { [ -d tmp ] || mkdir tmp cp *.jpg tmp # copie dans tmp avant validation clear # titre echo echo -n " Quel titre ? Entrez un titre : " read titre [ -z "$titre" ] || titre=`echo "_$titre" | tr " " "_" | tr 'A-Z' 'a-z'` # suppression des espaces et majuscules #nom=${dt}${titre} # choix d'une chaine à effacer. à revoir avec awk #echo #echo -n " Quelle chaîne de caractère faut-il effacer ? (par défaut : $chaine1 = \"Entrée\") : " #read chaine2 #lis=`find ./*.jpg | grep "$chaine2" | head -1` # control de l'existence de la chaine #until [ -z "$chaine2" -o -n "$lis" ] #do #echo " Réponse invalide: \"$chaine2\", cette chaine n'existe pas " #read chaine2 #done #chaine=${chaine2:-$chaine1} # date echo echo -n " Extraire la date EXIF ? \"o\" ou \"n\" : " read reponseZ until [ "$reponseZ" = "n" -o "$reponseZ" = "o" ] do echo " Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " read reponseZ done clear case $reponseZ in [oO]*) # date EXIF "" dt="" #for f in *.jpg ; do identify -format %[EXIF:DateTimeOriginal] img_0024.jpg | tr " " "_" > liste #identify -format %[EXIF:DateTimeOriginal] img_0024.jpg | mv img_0024.jpg "$0_$titre" cat liste sleep 10 #done ;; [nN]*) # date manuelle ou par défaut echo echo -n " Quelle date ? (\"yyyymmdd\" ; aujourd'hui: \"$dt1\" = Entrée) : " read dt2 until [ -z "$dt2" -o "${#dt2}" = 8 ] # control du nb de caractères #until [ -z "$dt2" -o "${#dt2}" = "[a-zA-Z]*" # control numérique....a faire do echo " Réponse invalide: \"$dt2\", vous devez entrer 8 chiffres : \"yyyymmdd\" " read dt2 done dt="${dt2:-$dt1}" nom=${dt}${titre} # renommage ls | grep .jpg >> liste # pour awk recalage du n° d'image #awk '{ system("mv -v "sprintf("\"%s\" \"%s%s%s\"", $0, "toto", sprintf("%d", FNR), ".jpg")) }' liste # OK #awk '{ system("mv -v "sprintf("\"%s\" \"%s%s%s\"", $0, prefixe, sprintf("%d", FNR), ".jpg")) }' prefixe="$nom" liste # en cours #awk '{ system("mv -v "sprintf("\"%s\" \"%s%s%s%s\"", $0, prefixe, "_", sprintf("%d", FNR), ".jpg")) }' prefixe="$nom" liste # OK OK awk '{ system("mv -v "sprintf("\"%s\" \"%s%s%s%s%s\"", $0, dat, tit, "_", sprintf("%d", FNR), ".jpg")) }' dat="$dt" tit="$titre" liste ;; esac # ancienne version de renommage #for f in *.jpg ; do #identify -format %[EXIF:DateTimeOriginal] | mv $f $0 #mv $f "${nom}_${f##$chaine}" # supprime chaine #done # vérif du renommage clear [ -e liste ] && rm liste ls | grep .jpg >> liste clear cat liste [ -e liste ] && rm liste echo $bar echo echo -n " Etes-vous satisfait du renommage ? \"o\" ou \"n\" : " read reponseZ until [ "$reponseZ" = "n" -o "$reponseZ" = "o" ] do echo " Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " read reponseZ done clear case $reponseZ in [oO]*) echo $bar echo echo -n "Remplacer le repertoire d'origine \"$bas\" par \"$nom\"? \"o\" ou \"n\" : " read reponseZ until [ "$reponseZ" = "n" -o "$reponseZ" = "o" ] do echo " Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " read reponseZ done clear case $reponseZ in [oO]*) cd .. mv ${rep} $nom cd $nom ;; [nN]*) ;; esac ;; [nN]*) rm *.jpg ; cp tmp/*.jpg . ; clear ; menu ;; #*) #echo "Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " ;; esac } #### fonctions conv ### function conv () { [ -d tmp ] || mkdir tmp cp *.jpg tmp # copie dans tmp avant validation clear # taille echo echo -n " Quelle largeur/hauteur maxi? (par défaut : \"$taille1\" = Entrée) : " read taille2 taille=${taille2:-$taille1} # dossier dos1=mod_$taille echo -n " Dans quel sous-dossier? (par défaut : \"$dos1\") : " read dos2 dos=${dos2:-$dos1} [ -d $dos ] || mkdir $dos #mkdir "$dos" # conversion for f in *.jpg ; do #convert -geometry "x${taille}" $f "${dos}/$f" hauteur maxi seulement convert -resize "${taille}x${taille}" $f "${dos}/$f" done # vérification de conversion #[ -d "$dos" ] && cd "$dos" && ls -l && cd .. clear [ -d "$dos" ] && cd "$dos" && ident && cd .. echo $bar echo echo "Les images sont déposées dans le sous-dossier \"$dos\"" echo echo $bar echo echo -n "Etes-vous satisfait de la conversion ? \"o\" ou \"n\" : " read reponseZ until [ "$reponseZ" = "n" -o "$reponseZ" = "o" ] do echo "Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " read reponseZ done clear case $reponseZ in [oO]*) echo echo -n " Remplacer les images d'origine par les images réduites? \"o\" ou \"n\" : " read reponseZ until [ "$reponseZ" = "n" -o "$reponseZ" = "o" ] do echo " Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " read reponseZ done clear case $reponseZ in [oO]*) rm *.jpg ; mv $dos/*.* . ; rm -rf $dos ;; [nN]*) ;; esac ;; [nN]*) rm *.jpg ; cp tmp/*.jpg . ; [ -d "$dos" ] && rm -rf "$dos" ; menu ;; esac } #### fonction sign ### function sign () { clear #tex=$pos '$sig' #lig="-font $fon -stroke black -fill white -pointsize $poi -draw "text $tex")" OK for f in *.jpg do #convert -verbose -font $fon -stroke $cou -fill white -pointsize $poi -draw "text $pos1 '$sig'" $f $f # OK en cours #convert -verbose -font $fon -stroke black -fill white -pointsize $poi -draw "text $pos1 '%[EXIF:DateTimeOriginal]'" $f $f # test composite -geometry $pos2 $sima $f $f #composite -geometry $pos2 $sima 20040927_maison_ulm_2.jpg test.jpg # OK image #command="convert -verbose $lig $f $f" #form="composite -geometry +10+10 $f ~/sig1.jpg $f.test" #${form} done #sleep 5 } #### fonction igal ### function html () { [ -d "$dos" ] && cd $dos mkdir html ; cp ./*.jpg html igal $iga # commande de igal #echo " Editez le fichier .caption avant de continuer" # verif igal #[ -d html ] && ls -l html/*.html clear rep=`pwd` bas=`basename $rep` echo echo $bar echo echo les fichiers sont dans le dossier \"$bas/html\" echo echo $bar echo echo -n "Remplacer les images du dossier \"$bas\" par le contenu de \"$bas/html\"? \"o\" ou \"n\" : " read reponseZ until [ "$reponseZ" = "n" -o "$reponseZ" = "o" ] do echo " Réponse invalide: \"$reponseZ\", vous deviez répondre par \"o\" ou \"n\" " read reponseZ done clear case $reponseZ in [oO]*) #rm *.jpg ; mv html/* . ; rm -rf html rm *.jpg ; mv html/* . ; mv html/.* . ; rm -rf html #mkdir ../html ; mv $rep/* ../html ; cd .. ;; [nN]*) ;; esac } ### lancement du script #### menu ### fin du lancement du script ####