Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

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.

Avant
pa170049in6.jpg


Après
pa170049mo5.jpg

Avant
pb110047dg0.jpg


Après
pb110047pv8.jpg

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 smile

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 wink

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

Willen a écrit :

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

smile


« 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 wink (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 smile

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é big_smile

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 cool

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 big_smile

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! yikes

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.

Willen a écrit :

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

john5168 a écrit :

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