![]() |
| |||||||
| S'inscrire | FAQ | Membres | Calendrier | Recherche | Messages du jour | Marquer les forums comme lus |
![]() |
| LinkBack | Outils de la discussion | Modes d'affichage |
| |||
| Bonjour, J'ai récupéré je ne sais plus où, http://www.root66.net ne me renseigne pas ..... _____________ #!/bin/sh # # Incrustation de la date, de l'heure, du nom de fichier et/ou du commentaire dans des images JPG # ----------------------------------------------------------------------------------------------- # # D'apres les infos Exif Date/Time/Comment et le nom xxxx.jpg, on incruste : # # JJ/MM/AA HHhMM xxxx commentaire # # en noir/blanc en bas a gauche de l'image. # # Toutes les combinaisons sont possibles en option # # les suffixes jpeg, JPEG et JPG sont transormes en jpg. # # Boucle sur les seules images jpg du dossier courant # ou plusieurs niveaux de sous-dossiers selon la variable # max passee en 1er argument du script. # # Auteur : Jeanmm # Date : aout 2006 # Licence : GPL # Lien : http://www.root66.net # Les arguments doivent etre numeriques et sont tous positionnels; # les noms de fichiers doivent etre sans blancs. # 1er argument : profondeur du find # --------------------------------- if [ 0$1 -eq 0 ] ; then max=$1 else max=1 fi # Les 5 arguments suivants sont dans l'ordre les champs optionnels : # - date # - heure # - nom de fichier # - commentaire # - taille caracteres (ratio hauteur d'image / taille des caracteres) # avec 0 : absence, 1 : present (sauf taille) # valeurs par defaut : 0 0 0 0 30 if [ 0$2$3$4$5 -eq 0 ] ; then echo "Aucune incrustation demandee ?!?" exit 1 fi blabla="" if [ 0$2 -eq 0 ] ; then Date=0 else Date=$2 blabla="$blabla Date" fi if [ 0$3 -eq 0 ] ; then Heure=0 else Heure=$3 blabla="$blabla Heure" fi if [ 0$4 -eq 0 ] ; then Nom=0 else Nom=$4 blabla="$blabla Nom" fi if [ 0$5 -eq 0 ] ; then Comm=0 else Comm=$5 blabla="$blabla Commentaire" fi # rapport taille image / taille car >= 5; 30 par defaut if [ 0$6 -eq 0 ] ; then tcc=30 else if [ 0$6 -lt 5 ] ; then tcc=5 else tcc=$6 fi fi # Si un 7eme argument est present on liste des infos en + # ------------------------------------------------------- if [ 0$7 -eq 0 ] ; then Bavard=0 else if [ $7 -gt 1 ] ; then set -x fi Bavard=$7 fi # Comptage des images # ------------------- countT=0 for ii in `find . -maxdepth $max -type f -iname "*.jpg"` ; do countT=$[$countT + 1] done test $countT -eq 0 && echo "Aucune image.jpg a traiter ?" && exit 0 if [ $Bavard -eq 1 ] ; then if [ $countT -lt 1 ] ; then echo "Incrustation de texte : aucune image trouvee" exit 0 elif [ $countT -lt 2 ] ; then echo "Incrustation avec ratio hauteur-image/texte de $tcc : $countT image trouvee" else echo "Incrustation avec ratio hauteur-image/texte de $tcc : $countT images trouvees" fi fi # Traitement # ---------- cc=0 # compteur d'images traitees for i in `find . -maxdepth $max -type f -iname "*.jpg" | sort` ; do # Lecture de la date d1="" d2="" d3="" if [ $Date -ne 0 ] ; then # Lecture de date par ImageMagick-identify #d1=" "`identify -format "%[EXIF ateTime]" "$i" | awk '{printsubstr($1,9,2)}'`"/" # ou lecture par jhead (laisser l'une des 2 en commentaire) d1=" "`jhead "$i" | awk ' $1=="Date/Time" {print substr($3,9,2) }' `"/" #d2=`identify -format "%[EXIF ateTime]" "$i" | awk '{printsubstr($1,6,2)}'` d2=`jhead "$i" | awk '$1=="Date/Time" {print substr($3,6,2)}'`"/" #d3=`identify -format "%[EXIF ateTime]" "$i" | awk '{printsubstr($1,3,2)}'` d3=`jhead "$i" | awk '$1=="Date/Time" {print substr($3,3,2)}'` if [ $d1 == "/" ] ; then d1="" fi if [ $d2 == "/" ] ; then d2="" fi fi # Lecture de l'heure d4="" d5="" if [ $Heure -ne 0 ] ; then #d4=" "`identify -format "%[EXIF ateTime]" "$i" | awk '{printsubstr($2,1,2)}'`"h" d4=" "`jhead "$i" | awk '$1=="Date/Time" {print substr($4,1,2)}'`"h" #d5=`identify -format "%[EXIF ateTime]" "$i" | awk '{printsubstr($2,4,2)}'` d5=`jhead "$i" | awk '$1=="Date/Time" {print substr($4,4,2)}'` if [ $d4 == "h" ] ; then d4="" fi fi # Lecture du nom de fichier, sans prefixe ni suffixe ni "_" nn="" if [ $Nom -ne 0 ] ; then xx=$i yy=${xx##*/} zz=${yy%.*} nn=" $(echo "$zz" | tr "_" " ")" fi # Lecture du commentaire co="" if [ $Comm -ne 0 ] ; then # il semble que identify soit plus fiable pour le commentaire co=" "`identify -format "%c" "$i"` #co=" "`jhead "$i" | awk '$1=="Comment" {print substr($0,16,length($0)-15)}'` # protection des apostrophes avec un "\" : chaque "'" donne "\'" #co=$(echo "$zz" | sed "s/'/\\\'/g") fi # Lecture de la largeur et hauteur de l'image #x=`identify -format '%w' "$i"` #y=`identify -format '%h' "$i"` x=`jhead "$i" | awk ' $1=="Resolution" {print $3}' ` y=`jhead "$i" | awk ' $1=="Resolution" {print $5}' ` #set -x # Calcul jc = taille du jeu de caracteres selon les proportions de l'image # $tcc = rapport de base en entree tel que jc = y/tcc si y/x=3/4 jcmin=20 # taille minimale absolue; par ailleurs tcc >= 5 deja vrai # Pour avoir le meme aspect d'affichage quelle que soit l'image, on a : # si y/x >= 3/4 : jc = y/tcc # sinon : jc = y/tcc * (3/4) / (y/x) (l'image affichee diminue en hauteur, # il faut donc compenser en augmentant la taille des caracteres) # autrement dit : # si 4y >= 3x : jc = y/tcc # sinon : jc = y/tcc * 3x / 4y = 3x /tcc /4 # En fait la distinction points/pixels introduit un second rapport 4/3, et on aura : # si 4y >= 3x : jc = 4/3 * y/tcc # sinon : jc = 4/3 * y/tcc * 3x / 4y = x /tcc t1=$[$y * 4] t2=$[$x * 3] if [ $t1 -ge $t2 ] ; then jc=$[$y * 4 / $tcc / 3] else jc=$[$x / $tcc] fi if [ $jc -lt $jcmin ] ; then jc=$jcmin fi # positions des 2 ou 3 textes # (1 ou 2 inscriptions noires + 1 blanche) dc=$[($jc + 2) / 10] # decalage if [ $dc -lt 2 ] ; then dc=2 fi if [ $dc -ge 2 ] ; then dc2=$[$dc / 2] else dc2=0 fi x=$[$y/45] y1=$[$y-$x+$dc] y1b=$[$y-$x+$dc2] y2=$[$y-$x] x1=$x x1b=$[$x-$dc2] x2=$[$x-$dc] # Commandes d'incrustation des 2 textes if [ $dc2 -gt 0 ] ; then convert -font helvetica -fill black -pointsize $jc -draw "text $x1,$y1 \"$d1$d2$d3$d4$d5$nn$co\"" $i /tmp/tempo2.jpg convert -font helvetica -fill black -pointsize $jc -draw "text $x1b,$y1b \"$d1$d2$d3$d4$d5$nn$co\"" /tmp/tempo2.jpg /tmp/tempo.jpg convert -font helvetica -fill white -pointsize $jc -draw "text $x2,$y2 \"$d1$d2$d3$d4$d5$nn$co\"" /tmp/tempo.jpg $i.jpg rm -f /tmp/tempo2.jpg else convert -font helvetica -fill black -pointsize $jc -draw "text $x1,$y1 \"$d1$d2$d3$d4$d5$nn$co\"" $i /tmp/tempo.jpg convert -font helvetica -fill white -pointsize $jc -draw "text $x2,$y2 \"$d1$d2$d3$d4$d5$nn$co\"" /tmp/tempo.jpg $i.jpg fi #set +x # remise de la date d'origine touch -r "$i" "$i.jpg" && rm -f "$i" && mv "$i.jpg" "$i" rm -f /tmp/tempo.jpg if [ $Bavard -eq 1 ] ; then echo "Incrustation de$blabla dans $i" cc=$[$cc + 1] fi done if [ $Bavard -eq 1 ] ; then if [ $cc -lt 2 ] ; then echo "Incrustation de$blabla : $cc image modifiee" else echo "Incrustation de$blabla : $cc images modifiees" fi fi ________________________________ Mais mes connaissances de newbee ne me permettent pas de le faire fonctionner. Un petit coup de main svp pour la mise en oeuvre... fr |
| | ||||
| ||||
| |
| |||
| Bonjour, Merci pour ta réponse. Oui en fouillant j'avais trouvé PIL et en 4 lignes on insère un texte... Grâce à toi et exif-py le reste est possible. Cordialement fr "elGringo" <sebmegret***gmail.com> a écrit dans le message de news: 96c42ca3-60aa-46ff-934f-149fec80272a...oglegroups.com... Bonjour, malheureusement ton script n'est pas du python mais un script unix. Je crois que tu t'es trompé de forum.... Néanmoins, pour dispenser la bonne parole et convertir les foules à l'adoration du python, je te dévoile un secret: Tu peux faire la même chose avec python (et surement plus facilement). Pour cela, il te faut: un interpréteur python, le module PIL (manipulation d' images) , os ou glob pour parcourir l'arborescence de ton répertoire, le module pour lire les exif à télécharger sur http://sourceforge.net/projects/exif-py/ Quelques lectures des saintes écritures pythoniques (des tutoriaux pour ainsi dire) glanés via le saint Google et hop, te voilà converti. Ne reste plus qu'à écrire le script et si ta foi vient à s'amoindrir devant les difficultés, tu peux toujours poster tes prières sur les forums python, dont les usagers sauront partager ta peine et te designer le droit chemin. ps: si tu n'es pas python-ready et que tu t'es simplement trompé de forum, tu devrais aussi pouvoir le faire avec ImageMagick ![]() Bon python. psps: j'ai loupé la messe avec tout ça, bon ben tant pis, je fais faire un peu de python .... ![]() |
| |
| |
![]() |
| Tags: insrer, jpg, texte |
| Outils de la discussion | |
| Modes d'affichage | |
| |
| ||||
| Discussion | Auteur | Forum | Réponses | Dernier message |
| Existe-t-il un code espace insécable à utiliser dans la Source contrôle d'une zone de texte ? | Céline Brien | Newsgroup microsoft.public.fr.access | 0 | 11/06/2008 14h35 |
| Insérer l'heure dans une cellule | rthompson | Newsgroup microsoft.public.fr.excel | 4 | 26/03/2008 13h34 |
| Insérer le nom du fichier .jpg dans la photo | Jean-Luc Cornet | Newsgroup microsoft.public.fr.powerpoint | 2 | 18/12/2007 15h52 |
| Insérer des silences dans un .mp3 | Gump | Newsgroup fr.comp.os.ms-windows | 5 | 08/11/2007 09h33 |
| insérer une valeur dans un MsgBox | hako | Newsgroup microsoft.public.fr.dotnet | 2 | 06/12/2006 16h50 |