Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

insérer du texte dans un jpg

2 réponses
Avatar
fr
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:DateTime]" "$i" | awk '{print
substr($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:DateTime]" "$i" | awk '{print
substr($1,6,2)}'`
d2=`jhead "$i" | awk '$1=="Date/Time" {print substr($3,6,2)}'`"/"
#d3=`identify -format "%[EXIF:DateTime]" "$i" | awk '{print
substr($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:DateTime]" "$i" | awk '{print
substr($2,1,2)}'`"h"
d4=" "`jhead "$i" | awk '$1=="Date/Time" {print substr($4,1,2)}'`"h"
#d5=`identify -format "%[EXIF:DateTime]" "$i" | awk '{print
substr($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

2 réponses

Avatar
elGringo
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 .... ;)
Avatar
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" a écrit dans le message de news:

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 .... ;)