bash et imagemagick

bash et imagemagick - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 30-06-2007 à 17:36:18    

bonjour,
 
j'ai un probleme de bash :
j'ai un paquet d'images a redimensionner. le probleme, c'est que pas une ne fait la meme taille, ni meme le meme ratio h/w
 
donc ce que je veux, c'est juste qu'elles fassent environ 1000px su le coté le plus grand
 
j'utilise imagemagick et la fonction de conversion suivante
 

Code :
  1. convert image.jpg -quality 80 -resize %rapport image.jpg


 
 
bon, je fais une partie de mon script en me basant sur ce que j'ai pu trouver.
a part la fonction de conversion, ca marche (bon, c'est pas non plus compliqué)
je me doute que c'est un probleme de guillemet ou de quote, mais j'ai essayé plusieurs trucs et je trouve pas
 

Code :
  1. #!/bin/bash
  2. for element in * ; do
  3.     extension=`echo $element |awk -F "." '{print $NF}'`
  4.     case $extension in
  5.         JPG|jpg|jpeg|JPEG )
  6.             echo traitement image : $element
  7.                 tx=`identify -format "%w" "${element}"`
  8.                 ty=`identify -format "%h" "${element}"`
  9.                 dif=`echo $(($tx-$ty))`
  10.                 if [ $dif -ge 0 ]; then
  11.                     if [ $tx -ge "1024" ];thenou
  12.                         rapport=`echo $((102400/$tx))`
  13.                         convert $element -quality 80 -resize "${rapport}"'%' 'th_'"${element}"
  14.                     fi
  15.                 else
  16.                     if [ $ty -ge "1024" ];then
  17.                         rapport=`echo $((102400/$ty))`
  18.                         convert $element -quality 80 -resize "${rapport}"'%' 'th_'"${element}"
  19.                     fi
  20.                 fi
  21.                 ;;
  22.         * );;
  23.     esac
  24. done


 
 
si quelqu'un peut eclairer ma lanterne, je lui en serais gré


---------------
ras
Reply

Marsh Posté le 30-06-2007 à 17:36:18   

Reply

Marsh Posté le 02-07-2007 à 10:01:56    

personne [:cupra]


Message édité par kaillou38 le 02-07-2007 à 11:23:57

---------------
ras
Reply

Marsh Posté le 02-07-2007 à 10:39:20    

bash -eux

Reply

Marsh Posté le 02-07-2007 à 10:45:03    

1er point: remplace tes `...` par des $(...)
2e point: mets tes variables en majuscule: $bla -> $BLA
3e point: place tes variables $BLA entre quotes et avec des accolades: "${BLA}"

 

Après, on discutera :o

 

[:cupra]


Message édité par wedgeant le 02-07-2007 à 10:45:51

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 02-07-2007 à 12:54:23    

merci de ta reponse :

 
  • 1er point : c'est pour mes $BLA=`echo machin` que tu dis ca?

       ca me semblait marcher pourtant (bon j'ai modifié)

  • 2eme point : ca a une reelle importance, ou c'est juste pour facilement visualiser une variable et ce qui n'en est pas une? (bon, j'ai modifier aussi)
  • 3eme point : c'etait pas deja fait? (enfin au moins pour celles qui peuvent poser probleme [:cupra]


voila, j'en suis la :

 
Code :
  1. #!/bin/bash
  2. for ELEMENT in * ; do
  3.     EXTENSION=$(echo $ELEMENT |awk -F "." '{print $NF}')
  4.     case $EXTENSION in
  5. JPG|jpg|jpeg|JPEG )
  6.     echo traitement image : $ELEMENT
  7.     TX=$(identify -format "%w" "${ELEMENT}" )
  8.     TY=$(identify -format "%h" "${ELEMENT}" )
  9.     DIF=$(echo $(($TX-$TY)))
  10.      
  11.     if [ $DIF -ge 0 ]; then
  12.  if [ $TX -ge "1024" ];then
  13.      rapport=$(echo $((102400/$TX)))
  14.      echo $rapport
  15.      convert $element -quality 80 -resize "${RAPPORT}"'%' 'th_'"${ELEMENT}"
  16.  fi
  17.     else
  18.  if [ $TY -ge "1024" ];then
  19.      rapport=$(echo $((102400/$TY)))
  20.      echo $rapport
  21.      convert $element -quality 80 -resize "${RAPPORT}"'%' 'th_'"${ELEMENT}"
  22.  fi
  23.     fi
  24.     ;;
  25.              * );;
  26.     esac
  27. done
 

le message d'erreur qui en resulte est le suivant :

 
Citation :

convert: missing an image filename `th_ZZFacture_Bonnerue.jpg'.

 

je me doute bien que c'est un probleme de concatenation, j'ai essayé d'elenver les simples quote pourvoir, meme resultat

 

j'ai donc simplement essayé de concatené avant pour le %

 
Code :
  1. #!/bin/bash
  2. for ELEMENT in * ; do
  3.     EXTENSION=$(echo $ELEMENT |awk -F "." '{print $NF}')
  4.     case $EXTENSION in
  5. JPG|jpg|jpeg|JPEG )
  6.     echo traitement image : $ELEMENT
  7.     TX=$(identify -format "%w" "${ELEMENT}" )
  8.     TY=$(identify -format "%h" "${ELEMENT}" )
  9.     DIF=$(echo $(($TX-$TY)))
  10.      
  11.     if [ $DIF -ge 0 ]; then
  12.  if [ $TX -ge "1024" ];then
  13.      RAPPORT=$(echo $((102400/$TX)))
  14.      RAPPORT="${RAPPORT}"'%'
  15.      echo $RAPPORT
  16.      convert $ELEMENT -quality 80 -resize "${RAPPORT}" 'th_'"${ELEMENT}"
  17.  fi
  18.     else
  19.  if [ $TY -ge "1024" ];then
  20.      RAPPORT=$(echo $((102400/$TY)))
  21.      RAPPORT="${RAPPORT}"'%'
  22.      echo $RAPPORT
  23.      convert $ELEMENT -quality 80 -resize "${RAPPORT}" 'th_'"${ELEMENT}"
  24.  fi
  25.     fi
  26.     ;;
  27.              * );;
  28.     esac
  29. done
 

et ca ca marche...

 

donc, pour voir, j'ai essayé pour voir de mettre un antilash avant le % dans la premiere version de ce que j'ai fait, mais ca marchait pas :(

 

mais bon, j'ai une version qui marche, ca me suffit :D


Message édité par kaillou38 le 02-07-2007 à 12:54:42

---------------
ras
Reply

Marsh Posté le 02-07-2007 à 13:11:36    

edit²: essaye de mettre

Code :
  1. set -x
  2. ton_code
  3. set +x
 

Et regarde la cause du plantage


Message édité par wedgeant le 02-07-2007 à 13:13:58

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 02-07-2007 à 13:35:02    

Le problème, c'est que dans ton premier script, tu mettais "convert $element" au lieu de "convert $ELEMENT".
 
Ta concaténation de '%' n'a rien a voir là dedans AMHA...


---------------
TriScale innov
Reply

Marsh Posté le 02-07-2007 à 13:37:07    

Et tu devrais mettre TOUTES tes variables entre quote :o

 

edit: au passage, [:pato el canardo] toi ;)

Message cité 1 fois
Message édité par wedgeant le 02-07-2007 à 13:37:27

---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 02-07-2007 à 13:39:52    

wedgeant a écrit :

Et tu devrais mettre TOUTES tes variables entre quote :o

Espèce d'intaygriste du shell :o
 
[:cupra]
 
 

wedgeant a écrit :

edit: au passage, [:pato el canardo] toi ;)

[:zytra]  


---------------
TriScale innov
Reply

Marsh Posté le 02-07-2007 à 13:53:38    

franceso a écrit :

Le problème, c'est que dans ton premier script, tu mettais "convert $element" au lieu de "convert $ELEMENT".
 
Ta concaténation de '%' n'a rien a voir là dedans AMHA...


 
en bash ${string%substring} ca strip substring de string... bon ok ca a ptet pas de rapport, mais jm'en fous jle dis quand même :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 02-07-2007 à 13:53:38   

Reply

Marsh Posté le 02-07-2007 à 13:54:57    

Xavier_OM a écrit :

en bash ${string%substring} ca strip substring de string... bon ok ca a ptet pas de rapport, mais jm'en fous jle dis quand même :o


Ca a pas de rapport car son "%" est en dehors de ${...} :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed