#1 Le 10/04/2007, à 09:55
- benjou
[pour photographes amateurs]rendre les photos plus vives par lot
EDIT le script a changé, ce qui rends les commentaires #4 à #21 non pertinents
Le soleil de midi souvent écrase les couleurs sur la 'pellicule' digitale.
ImageMagick peut nous aider à rendre les couleurs plus vives de toutes les photos d'un répertoire donné en 2 sec de manipulation et 2min de CPU
sudo apt-get install imagemagick
ensuite, admettons que vous avez des jpg dans le dossier ~/foo (et ses sous dossiers)
Lancez cette ligne de commande
find ~/foo -iname '*.jpg' -exec mogrify -modulate 100,120,105 {} ";"
Cette commande va traiter par lot toutes les tofs comme suit:
luminosité 100% (donc inchangée)
saturation 120% (donc couleurs plus vives)
"hue" 105%. Cela tire le spectre très légèrement vers le violet. Ca rends le ciel plus profond, moins passé. Ça rend l'herbe vert-tendre et les couchers de soleil plus dramatiques encore.
Le changement n'est pas énorme mais il améliore plus ou moins n'importe quelle photo.
Les valeurs de corrections sont peut-être à adapter pour chaque appareil de photo, pour le mien, c'est ce que j'ai trouvé de mieux...
Vous pouvez aussi le faire marcher sous gnome comme script nautilus:
Installation
sauvez le code suivant dans un fichier texte
#!/bin/bash
commande="mogrify -modulate 100,120,105"
p=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
f="$(echo -e "$p" | awk 'BEGIN {FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)"
zenity --question --title "Attention" --text "Les fichiers suivants seront modifiés : \n $p \n (Tous les JPG contenus dans les dossiers sélectionnés seront modifiés)"
if [ "$?" != "1" ]
then
echo 'for i in '"$f"'
do
if ( test -d "$i" )
then
find "$i" \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec '$commande' {} ";"
else
'$commande' "$i"
fi
done' >/tmp/mfytmp && sh /tmp/mfytmp
fi
sauvez sous ~/.gnome2/nautilus-scripts/saturation
lancez la commande
chmod +x ~/.gnome2/nautilus-scripts/saturation
pour rendre le script executable puis
killall nautilus
pour redémarrer nautilus.
Usage
-Selectionnez un dossier qui contient (lui et/ou ses sous-dossiers) des photos au format jpeg avec extension .jpg ou .JPG
-clicke droit sur le dossier, on va au menu nautilus-scripts, on selectionne 'stauration', on réponds à la question qui s'affiche et le tour est joué
ATTENTION Cette manip travaille sur les fichiers originaux sans possibilité d'annuler!
Dernière modification par benjou (Le 13/04/2007, à 06:59)
écrasons l'infâme
Hors ligne
#2 Le 10/04/2007, à 15:14
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
C'est vraimant biens comme truc,
J'ai juste deux questions :
1_ Il y a pas dans imagemagick une commande de type "Améliorer automatique" comme sous Gthumb ou sous paintshop (windows). Qui permet de redonner de la lumière, contraste ou saturation en fonction de la photo.
2_ Peut tu en faire un script nautilus tes quelque ligne de commande pour facilité l'utilisation ?
Dernière modification par john5168 (Le 10/04/2007, à 15:14)
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#3 Le 10/04/2007, à 16:54
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
C'est vraimant biens comme truc,
merci
1_ Il y a pas dans imagemagick une commande de type "Améliorer automatique" comme sous Gthumb ou sous paintshop (windows). Qui permet de redonner de la lumière, contraste ou saturation en fonction de la photo.
En fait je connais pas ca sous Gthumb (ni sous paintshop). Par contre, dans Gthumb tu vas dans image>hue-saturation. Tu rajoute 5 de hue et 20 de saturation et tu as le meme effet.
2_ Peut tu en faire un script nautilus tes quelque ligne de commande pour facilité l'utilisation ?
Avos ordres
tu selectionne un dossier et tu lance le script.
Sois prudent car cela affecte les photos originales sans possibilite d'annuler!!!
#!/bin/sh
folder="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
zenity --question --title "Attention" --text "Ceci changera toutes les photos du dossier ""$folder"
if [ "$?" != "1" ]
then
for i in `find $folder -iname '*.jpg'`; do
convert -modulate 100,120,105 $i /tmp/tmp.jpg
mv /tmp/tmp.jpg "$i"
done
fi
Dernière modification par benjou (Le 11/04/2007, à 11:28)
écrasons l'infâme
Hors ligne
#4 Le 10/04/2007, à 17:15
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Bonsoir,
C'est sympa en revanche la boucle ne semble pas fonctionner quand il y a des espaces dans les noms de fichiers (presque le cas pour toutes mes photos)
Hors ligne
#5 Le 10/04/2007, à 17:16
- Henry de Monfreid
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Bonsoir,
C'est sympa en revanche la boucle ne semble pas fonctionner quand il y a des espaces dans les noms de fichiers (presque le cas pour toutes mes photos)
sudo apt-get install krename
« Je te hais plus qu'aucun des dieux qui vivent sur l'Olympe
Car tu ne rêves que discordes, guerres et combats. »
Trouble obsessionnelcompulsif
Le TdCT est revenu (ils reviennent tous)
Hors ligne
#6 Le 10/04/2007, à 17:19
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Merci pinballyoda, mais je tiens à mes espaces (j'aime pas trop les _ partout)
Enfin avec find -exec ça devrait passer (je l'ai déjà fait pour d'autres opérations), mais s'il y a moyen d'adapter cette boucle précisément ça m'intéresse.
Dernière modification par Willen (Le 10/04/2007, à 17:27)
Hors ligne
#7 Le 11/04/2007, à 11:28
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Hola, tu m'en demande trop!
Gérer des noms à espace, c'est plus de ma compétence (la boucle 'for' prends les espaces pour des arguments séparés...)
Si quelqu'un qui SAIT coder en bash passe par la, il peut modifier mon script
par contre j'ai modifié le -name en -iname pour que le script trouve les *.jpg et *.JPG
écrasons l'infâme
Hors ligne
#8 Le 11/04/2007, à 15:09
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
si je ne me trompe pas tu peut utilisé mogrify plutôt que convert se qui t'économiseras la mv.
Par contre pour les espaces c'est dommage, il doit y avoir une solution je vais cherchais. "Je ne suis pas programmeurs je n'ai jamais fait une ligne de code" mais je pense que l'on peut résoudre le problèmes.
Pour ce qui connaissent bien imagemagick l'option -normalize fait quoi exactement.
Je recherche la possibilité d'ajuster le niveau de contraste automatiquement sans lui imposé une valeur de 20% comme dans ton script. Entre guillemets une intelligence qui donnerait le bon niveau en fonction l'état de la photo.
Lien des option de imagemagick
Merci,
Dernière modification par john5168 (Le 11/04/2007, à 15:10)
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#9 Le 11/04/2007, à 15:52
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Ce n'est pas très difficile pour les espaces dans les noms de trouver une autre solution, mais j'aurais bien aimé adapter celle-ci. J'ai essayé hier sans y arriver.
Solutions qui fonctionne avec des espaces dans les noms :
find ~/foo -iname '*.jpg' -exec \
convert -modulate 100,120,105 {} /tmp/tmp.jpg \; -exec \
mv /tmp/tmp.jpg {} \;
ou
find ~/foo -iname '*.jpg' | while read i; do \
convert -modulate 100,120,105 "$i" /tmp/tmp.jpg && \
mv /tmp/tmp.jpg "$i" ; done
pour que le script trouve les *.jpg et *.JPG
il faudrait éventuellement penser aux .jpeg
mogrify plutôt que convert se qui t'économiseras la mv.
je ne connais pas mogrify, mais plutôt que mv j'aurais utiliser rename avec l'option -f pour écraser le fichier source. Du style :
find ~/foo -iname '*.jpg' | while read i; do \
convert -modulate 100,120,105 "$i" "$i.tmp" && \
rename -f 's/.tmp$//' "$i.tmp" ; done
Dernière modification par Willen (Le 11/04/2007, à 17:19)
Hors ligne
#10 Le 11/04/2007, à 15:52
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Bon j'ai une solution pour les espaces a vous de tester :
#!/bin/sh
## auteur : benjou
folder="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
zenity --question --title "Attention" --text "Ceci changera toutes les photos du dossier ""$folder"
if [ "$?" != "1" ]
then
IFS=$'\n' && for i in $(find $folder -iname '*.jpg');do
mogrify -modulate 100,120,105 $i
done
fi
Mes sources pour cette modif sont : bash
et
imagemagick
A vos commentaire,
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#11 Le 11/04/2007, à 16:35
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Ah ok pour mogrify, c'est effectivement plus approprié
Pour le reste c'est plus simple d'utiliser find -exec,
find ~/ -iname '*.jpg' -exec mogrify -modulate 100,120,105 {} ";"
Dernière modification par Willen (Le 11/04/2007, à 16:39)
Hors ligne
#12 Le 11/04/2007, à 16:59
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
je ne comprend pas ton exemple Willen peut tu le mètre dans le script pour voir clair.
Merci.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#13 Le 11/04/2007, à 18:23
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
en reprenant à partir du if :
if [ "$?" != "1" ]
then
find "$1" -iname '*.jpg' -exec mogrify -modulate 100,120,105 {} ";"
fi
Hors ligne
#14 Le 11/04/2007, à 19:44
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Bravo les gars
Le truc c'était de se débarasser de la boucle 'for' qui prends tous les espaces pour des fichiers différents.
J'essaie le tout demain et j'update mon script
écrasons l'infâme
Hors ligne
#15 Le 12/04/2007, à 08:50
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
OK c'est modifié et ça marche. Ca prends meme en charge les .jpeg et .JPEG
Willen, pour mon édification personelle, pourrais-tu m'expliquer ce que sont les " {} ";" "
à la fin de la ligne de commande?
Dernière modification par benjou (Le 12/04/2007, à 09:22)
écrasons l'infâme
Hors ligne
#16 Le 12/04/2007, à 11:40
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
c'est la syntaxe de l'option -exec de find. -exec permet d'exécuter une commande sur les fichiers trouvés par find.
Le ";" ou \; représente la fin de l'option -exec (les guillements ou l'antislash pour qu'il ne soit pas interprété comme un ; ) et le {} "représente" le fichier.
pour l'extension .jpg et jpeg, inutile de doubler la commande, on peut faire directement
find "$1" \( -iname '*.jpg' -o -iname '*.jpeg' \) -exec mogrify -modulate 100,120,105 {} ";"
Jai testé le nautilus-script et apparemment il ne fonctionne pas à cause des guillements autour de $folder (mais sans ça pose aussi problème pour certains noms de dossiers). C'est pourquoi j'utiliserais plutôt find "$1"
Il y a moyen de formater le résultat du NAUTILUS_SCRIPT_SELECTED_FILE_PATHS de sorte que tous les chemins soit mis entre guillemets et sur une ligne. La méthode est donnée ici : http://g-scripts.sourceforge.net/faq.php#q7
Ainsi il y aurait possibilité de faire une boucle FOR pour tester chaque chemin : si c'est un dossier, on lui applique un find -exec et si c'est un fichier on exécute directement le mogrify.
Ça permettrait de ne pas être limité à un seul dossier, mais de pouvoir en sélectionner plusieurs et de pouvoir faire de même directement sur un ou plusieurs fichiers (voire même de sélectionner en même temps des fichiers et dossiers). J'essaierai ce soir.
Pour tester j'utiliser mogrify -negate, là on voit tout de suite si les images ont été traitées
Dernière modification par Willen (Le 12/04/2007, à 11:57)
Hors ligne
#17 Le 12/04/2007, à 13:35
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Quel foutoir!
Pas imaginé que c'était si problematique, les espaces dans les fichiers!
echo "`find "$folder" -iname '*.jpg'`"| sed 's/ /\\ /g'|xargs mogrify -negate
a l'air de faire l'affaire d'où le script complet:
#!/bin/sh
#authors:benjou, john5168, Willen
folder="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
zenity --question --title "Attention" --text "Ceci changera toutes les photos du dossier ""$folder"
if [ "$?" != "1" ]
then
echo "`find "$folder" \( -iname '*.jpg' -o -iname '*.jpeg' \)`"| sed 's/ /\\ /g'|xargs mogrify -modulate 100,120,105
fi
Pour une raison que j'ignore, xargs passe mieux les noms a espace que find -exec.
Testez moi ça. Si vous avez mieux je suis preneur
EDIT eh ben non. ca marche nickel dans la console mais pas en nautilus-script. Je ne capte pas...
Dernière modification par benjou (Le 12/04/2007, à 13:46)
écrasons l'infâme
Hors ligne
#18 Le 12/04/2007, à 14:15
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
benjou ton dernier script ne fonctionne pas chez moi.
Je suis très intéresser par ce que dit Willen.
Ainsi il y aurait possibilité de faire une boucle FOR pour tester chaque chemin : si c'est un dossier, on lui applique un find -exec et si c'est un fichier on exécute directement le mogrify.
Ça permettrait de ne pas être limité à un seul dossier, mais de pouvoir en sélectionner plusieurs et de pouvoir faire de même directement sur un ou plusieurs fichiers (voire même de sélectionner en même temps des fichiers et dossiers). J'essaierai ce soir.
Donc j'attends de voir car je ne comprend pas tout.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#19 Le 12/04/2007, à 15:03
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
benjou ton dernier script ne fonctionne pas chez moi.
duquel parles-tu?
-celui de tout en haut fonctionne si il n'y a pas d'espace dans les nom
-celui de mon post #17 ne fonctionne pas en tant que nautilus-script mais il fonctionne en console...
écrasons l'infâme
Hors ligne
#20 Le 12/04/2007, à 15:46
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
ok benjou celui du #17 que je parler mais je l'ai tester que avec nautilus.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#21 Le 12/04/2007, à 16:32
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Bon alors j'ai essayé en me basant sur la ligne de g-script, et ça à l'air de fonctionner. On peut sélectionner un ou plusieurs fichiers et/ou un ou plusieurs dossiers, quelque soit leur nom.
#!/bin/bash
commande="mogrify -modulate 100,120,105"
p=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
f="$(echo -e "$p" | awk 'BEGIN {FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)"
zenity --question --title "Attention" --text "Les fichiers suivants seront modifiés : \n $p \n (Tous les JPG contenus dans les dossiers sélectionnés seront modifiés)"
if [ "$?" != "1" ]
then
echo 'for i in '"$f"'
do
if ( test -d "$i" )
then
find "$i" \( -iname "*.jpg" -o -iname "*.jpeg" \) -exec '$commande' {} ";"
else
'$commande' "$i"
fi
done' >/tmp/mfytmp && sh /tmp/mfytmp
fi
Pour chaque "chemin", si c'est un dossier on applique le find pour traiter toutes les jpg de celui-ci, si c'est un fichier on applique directement la commande
Apparement il faut indiquer #!/bin/bash et non #!/bin/sh sinon quelque chose semble mal être interprété.
Il faudrait peut-être ajouter une condition pour vérifier que les fichiers sélectionner sont bien des jpg, mais bon.
Hors ligne
#22 Le 12/04/2007, à 17:19
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Super Willen ton script #21 fonctionne nikel chez dans tout les cas de figure.
Par curiosité si on aurais voulue exécuté plusieurs commande dans ce script plutôt qu'une seul ; Comment aurais tu fait ?
(Comme initialement un convert et un mv)
Merci,
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#23 Le 12/04/2007, à 18:32
- Willen
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Par curiosité si on aurais voulue exécuté plusieurs commande dans ce script plutôt qu'une seul ; Comment aurais tu fait ?
(Comme initialement un convert et un mv)
Dans le cas de plusieurs commandes, j'utiliserais find avec while read plutôt qu'avec l'option -exec, comme cela le code pour les commandes pourra être identique dans un cas comme dans l'autre, il suffira de la mettre dans une seule variable :
#!/bin/bash
commandes='convert -modulate 100,120,105 "$fichier" /tmp/tmp.jpg && mv /tmp/tmp.jpg "$fichier"'
p=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
f="$(echo -e "$p" | awk 'BEGIN {FS = "\n" } { printf "\"%s\" ", $1 }' | sed -e s#\"\"##)"
zenity --question --title "Attention" --text "Les fichiers suivants seront modifiés : \n $p \n (Tous les JPG contenus dans les dossiers sélectionnés seront modifiés)"
if [ "$?" != "1" ]
then
echo 'for i in '"$f"'
do
if ( test -d "$i" )
then
find "$i" \( -iname "*.jpg" -o -iname "*.jpeg" \) | while read fichier
do
'$commandes'
done
else
fichier="$i"
'$commandes'
fi
done' >/tmp/mfytmp && sh /tmp/mfytmp
fi
Dernière modification par Willen (Le 12/04/2007, à 18:33)
Hors ligne
#24 Le 12/04/2007, à 19:48
- john5168
Re : [pour photographes amateurs]rendre les photos plus vives par lot
Merci Willen tes un pro tout fonctionne très bien, j'ai compris le truc pour plusieurs commande.
Je n'aurais jamais trouvais tous seul.
Super les gars un script type top.
Les associations du logiciel libre :
http://www.april.org/ ; http://www.aful.org/
Boutique informatique à encourager
Je suis client satisfais de Novatux
Hors ligne
#25 Le 13/04/2007, à 07:00
- benjou
Re : [pour photographes amateurs]rendre les photos plus vives par lot
trop cool, merci
J'ai modifie le post original
écrasons l'infâme
Hors ligne