#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...
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
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
Et j'ai mis des "" autour de $width et $height mais ça ne change rien.
Merci quand même
[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
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 ?
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
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"
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é
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à (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