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 13/04/2009, à 18:48

Colar

Nautilus script bash (simple) (je crois) - redimensionner images

[Avant-propos] Je ne sais pas coder. Ce qui suit sont des copier-coller sauvages de différents trucs trouvés dans différents scripts.

[Version rapide] Voici le script qui ne fonctionne pas :

#!/bin/bash

numImage=1
for image in "$@"; do
	width=`identify -format "%w" $image`
	height=`identify -format "%h" $image`
	if [ $width -gt $height ]; then
		convert -resize "640x480>" -quality 74 $image $image
		let $[numImage += 1]
	else
		convert -resize "480x640>" -quality 74 $image $image
		let $[numImage += 1]
	fi
done

[Version longue]

J'utilise actuellement 2 scripts nautilus : 1 pour les images paysage et l'autre pour les images portrait. Pour les paysages ça ressemble à ça :

#!/bin/bash

numImage=1
for image in "$@"; do
	convert -resize "640x480>" -quality 74 $image $image
        let $[numImage += 1]
done

Et ça fonctionne. Pour le portrait c'est juste 640x480> qui devient 480x640>.

À l'usage, il suffit de sélectionner les images paysages puis d'utiliser le script correspondant. Idem pour les portraits avec l'autre script. Et hop.

En fouillant la doc de imagemagick, j'ai trouvé une commande qui permet de voir la largeur et la hauteur d'une photo : identify -format "%w" et identify -format "%h".

Je me suis donc dit : pourquoi ne pas fusionner les 2 scripts en testant largeur et hauteur, si largeur > hauteur on fait resize 640x480> sinon resize 480x640>. Et malgré un fouillage de doc forcené et plein de copier-coller, j'y arrive pas.

Pourtant je crois que le script est assez simple. Une boucle pour faire les images les unes après les autres, un test largeur - hauteur et un if... else en fonction du test. Dis comme ça, ça me paraît facile. Mais comme je ne sais pas coder... hmm

Donc si quelqu'un voulait bien se pencher sur mon problème, je lui en serait très reconnaissant.

Merci d'avance.



[Note]

Je sais qu'il existe un script "NIS" qui permet de redimensionner des images par lots. Mais dans mon cas il ne convient pas pour 2 raisons.

Tout d'abord, il utilise zenity, il faut sélectionner le format, puis ok. Ça fait 4 clics (en comptant clic droit > nautilus scripts > NIS). Dans mon cas, le format est toujours 640x480 ou 480x640, je veux juste faire un clic droit > nautilus scripts > redimensionner. 2 clics et hop.

Ensuite, et c'est le plus important, si j'ai une image carrée (disons 800x800), NIS me la transformera en 640x640 si je sélectionne 640x480. Or moi je la veux en 480x480. D'où le > de resize 640x480>. Ou pour un cas moins trivial, une image en 1280x1024 sera transformée en 640x512. Et je la voudrais en 600x480.

Encore une fois, merci d'avance à celui qui voudra bien me donner un coup de main smile

Hors ligne

#2 Le 13/04/2009, à 19:12

AnsuzPeorth

Re : Nautilus script bash (simple) (je crois) - redimensionner images

Bjr,
A quoi sert la variable "numImage" , et je trouve qu'elle est incrémenté bizarrement ?
Et tu comptes écraser l'original ?

Essais déjà:

if [ "$width" -gt "$height" ]; then

pause un echo dans tes if, tu verras deja si il fonctionnent ?(en lancant en console)

Si la variable numImage ne te sert pas ailleurs, supprime (peut etre utile a imagemagick ????).

let $[numImage += 1]

Dernière modification par AnsuzPeorth (Le 13/04/2009, à 19:13)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#3 Le 13/04/2009, à 19:40

Colar

Re : Nautilus script bash (simple) (je crois) - redimensionner images

En fait, j'ai pas été clair : le script fonctionne mais ne prends pas en compte le if. En gros, il redimensionne tout en 640x480>. Donc pour les paysages c'est ok, mais pour les portraits ça met en x480 au lien de x640.

La variable numImage vient de ce script :

#!/bin/bash
# Renomme les fichiers ou dossiers passés en paramètres en replaçant les espaces par des underscrores _
numParam=1
for parametre in "$@"; do
        old_name="$parametre"
        new_name=`echo "$parametre" | tr -s ' ' '_'`
        mv "$old_name" "$new_name"
        let $[numParam += 1]
done

J'ai pensé que ça servait à incrémenter le machin. IE passer d'un fichier au suivant. Dans mon cas, passer d'une image à la suivante. Mais comme je l'ai dit, c'est du copier-coller sauvage et je ne comprends pas forcément ce que ça fait exactement tongue

Et j'ai mis des "" autour de  $width et $height mais ça ne change rien.

Merci quand même smile

[Edit] J'ai enlevé numImage=1 et let $[numImage += 1] et de fait, ça ne servait à rien, le script "fonctionne" comme avant.

Dernière modification par Colar (Le 13/04/2009, à 19:44)

Hors ligne

#4 Le 13/04/2009, à 19:48

Colar

Re : Nautilus script bash (simple) (je crois) - redimensionner images

AnsuzPeorth a écrit :

pause un echo dans tes if, tu verras deja si il fonctionnent ?(en lancant en console)

Euh... Je fais ça comment poser un echo dans mes if ? Et je echo quoi ? hmm

Hors ligne

#5 Le 13/04/2009, à 20:03

AnsuzPeorth

Re : Nautilus script bash (simple) (je crois) - redimensionner images

Bon, vite fait, sans tester

#! /bin/bash

for ligne in "$@"
do
format=$(identify -format "%wx%h>" "$ligne")
convert -resize $format "$ligne" "$ligne"
done

exit

Attention, ca ecrase les image d'origine, pour eviter cela, il faut un peu modif le truc, mais j'essaierais plus tard, là j'vais etre ocupé un moment


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#6 Le 13/04/2009, à 20:23

Colar

Re : Nautilus script bash (simple) (je crois) - redimensionner images

Ben en fait c'est ce que je veux, écraser les images d'origine. Là j'ai un dossier test pour faire mes... tests big_smile

Pour ton script par contre, il y a un truc qui m'échappe. Ta variable $format demande la taille de l'image, puis sur la ligne suivante ça redimensionne l'image par sa propre taille. Donc in fine aucun changement sur l'image (à part le poids de l'image qui change un peu vu que, si je ne m'abuse, imagemagick met par défaut -quality 84 à resize).

Mais merci quand même pour ton aide, là par exemple je viens de comprendre comment fonctionne "for" smile

Ah, et il n'y a pas d'urgence hein. Ça fait 3 jours que je m'arrache les cheveux sur ce satané script, je ne suis pas trop pressé wink

Hors ligne

#7 Le 13/04/2009, à 20:29

AnsuzPeorth

Re : Nautilus script bash (simple) (je crois) - redimensionner images

dsl, j'ai dit n'imp, j'ai confondu.... Je re dans nu moment pour te  faire ca

dsl, je suis surbooké là smile (d'ou ma confusion)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#8 Le 13/04/2009, à 21:55

AnsuzPeorth

Re : Nautilus script bash (simple) (je crois) - redimensionner images

re,
C'est en faisant le script que je me rends compte qu'l n'y a pas besoin de if grace a l'option -adaptive-resize

#! /bin/bash

for image in "$@"
do
 convert "$image" -adaptive-resize 480 -quality 74 "$image"
done

exit

Pour l'exemple, le script initial:

#! /bin/bash

for image in "$@"
do
format=$(identify -format "%w %h" "$image")
larg=$(cut -d " " -f1  <<< "$format")
haut=$(cut -d " " -f2 <<< "$format")

if [ "$haut" -gt "$larg" ]; then
 convert "$image" -adaptive-resize 480 -quality 74 "$image"
else
convert "$image" -adaptive-resize 640 -quality 74 "$image"
fi

done

exit

Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#9 Le 28/08/2010, à 15:24

biginoz

Re : Nautilus script bash (simple) (je crois) - redimensionner images

Pour corriger ton programme tu as oublié les ""
width=`identify -format "%w" "$image"`
height=`identify -format "%h" "$image"`

Hors ligne