« Discussion Trucs:Redimensionner des images » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
m (Sélection des images)
 
mAucun résumé des modifications
 
(4 versions intermédiaires par un autre utilisateur non affichées)
Ligne 41 : Ligne 41 :
Attention cependant : cette version du script sélectionnera également tout fichier dont le nom contient la chaine de caractères "image".
Attention cependant : cette version du script sélectionnera également tout fichier dont le nom contient la chaine de caractères "image".
</cadre>
</cadre>
== Redimensionnement strict d'une image ==
Bonjour, j'aimerais donner un détail sur cette astuce.
Pour manipuler  une image, convert est un outil très puissant. Un jour, j'ai du traiter un peu plus de 1000 images de tailles diverse pour en faire des miniatures 70x50.
En faisant la manipulation classique ci-dessous, nous obtenons des miniatures ayant au moins une coordonnée de respectée. On peut donc se retrouver avec des images de 60x50, 70x55, etc ... à cause de la mise a l'échelle automatique (ce qui peut être très ennuyeux ... ou pas).
<div class="code">convert -resize 70x50 image_ori.png image_mini.png</div>
la solution n'est pas très clair dans le manuel de convert mais il suffit juste d'ajouter un « ! » après votre coordonnée comme ceci :
<div class="code">convert -resize 70x50! image_ori.png image_mini.png</div>
Une petite astuce simple qui peut vous faire gagner beaucoup de temps ^^.
J'ai ajouté dans le programme de Douglas SIX  le support pour les png et les gif.
Merci Douglas six pour ce code, il m'est très utilse pour redimmensionner des images par lots.
Voici le code amélioré.
<code>#!/bin/bash
if [ $# -ne 1 ]
then
  echo "Usage: './resizePictures.sh taille' avec la taille sous la forme largeurxhauteur (640x480)."
  exit -1
fi
rep=resized-$1
if [ -d "$rep" ]; then
        echo "Repertoire $rep existe. Je ne le crée pas."
else
        echo "Repertoire $rep n'existe pas. Je le crée."
        mkdir $rep
fi
if [ 'ls *JPG' ]; then
        for i in *.JPG
        do
                let "n += 1"
        done
        echo "$n fichiers *.JPG existent. Je les converti."
        for i in *.JPG
        do
                if [ -e $rep/$i ]; then
                        echo "Le fichier $i existe deja dans le repertoire $rep."
                else
                        taille=`identify  $i | awk '{print $3}'`
                        echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                        convert -geometry $1 $i $rep/$i
                fi
        done
else
        echo "Aucun fichiers *.JPG n'existent. Je ne fait rien."
fi
if [ 'ls *jpg' ]; then
        for i in *.jpg
        do
                let "n += 1"
        done
        echo "$n fichiers *.jpg existent. Je les converti."
        for i in *.jpg
        do
                if [ -e $rep/$i ]; then
                        echo "Le fichier $i existe deja dans le repertoire $rep."
                else
                        taille=`identify  $i | awk '{print $3}'`
                        echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                        convert -geometry $1 $i $rep/$i
                fi
        done
else
        echo "Aucun fichiers *.jpg n'existent. Je ne fait rien."
fi
if [ 'ls *PNG' ]; then
        for i in *.PNG
        do
                let "n += 1"
        done
        echo "$n fichiers *.PNG existent. Je les converti."
        for i in *.PNG
        do
                if [ -e $rep/$i ]; then
                        echo "Le fichier $i existe deja dans le repertoire $rep."
                else
                        taille=`identify  $i | awk '{print $3}'`
                        echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                        convert -geometry $1 $i $rep/$i
                fi
        done
else
        echo "Aucun fichiers *.PNG n'existent. Je ne fait rien."
fi
if [ 'ls *png' ]; then
        for i in *.png
        do
                let "n += 1"
        done
        echo "$n fichiers *.png existent. Je les converti."
        for i in *.png
        do
                if [ -e $rep/$i ]; then
                        echo "Le fichier $i existe deja dans le repertoire $rep."
                else
                        taille=`identify  $i | awk '{print $3}'`
                        echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                        convert -geometry $1 $i $rep/$i
                fi
        done
else
        echo "Aucun fichiers *.png n'existent. Je ne fait rien."
fi
if [ 'ls *GIF' ]; then
        for i in *.GIF
        do
                let "n += 1"
        done
        echo "$n fichiers *.GIF existent. Je les converti."
        for i in *.GIF
        do
                if [ -e $rep/$i ]; then
                        echo "Le fichier $i existe deja dans le repertoire $rep."
                else
                        taille=`identify  $i | awk '{print $3}'`
                        echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                        convert -geometry $1 $i $rep/$i
                fi
        done
else
        echo "Aucun fichiers *.GIF n'existent. Je ne fait rien."
fi
if [ 'ls *gif' ]; then
        for i in *.gif
        do
                let "n += 1"
        done
        echo "$n fichiers *.gif existent. Je les converti."
        for i in *.gif
        do
                if [ -e $rep/$i ]; then
                        echo "Le fichier $i existe deja dans le repertoire $rep."
                else
                        taille=`identify  $i | awk '{print $3}'`
                        echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                        convert -geometry $1 $i $rep/$i
                fi
        done
else
        echo "Aucun fichiers *.gif n'existent. Je ne fait rien."
fi
</code>

Dernière version du 1 novembre 2006 à 15:08

Sélection des images

Je ne suis pas expert dans l'utilisation de sed et awk, donc il y a peut-être plus efficace, mais avec la commande file * |grep image|sed s/":"//g|awk '{print $1}' on récupère la liste des fichiers reconnus par la commande file comme étant des images. Ainsi on rend compatible le script avec n'importe quel type d'image et on le rend insensible à la casse de l'extension. Voici une version modifiée du script :

#!/bin/bash

if [ $# -ne 1 ]
then
  echo "Usage: './resizePictures.sh taille' avec la taille sous la forme largeurxhauteur (640x480)."
  exit -1
fi
rep=resized-$1
if [ -d "$rep" ]; then
        echo "Repertoire $rep existe. Je ne le crée pas."
else
        echo "Repertoire $rep n'existe pas. Je le crée."
        mkdir $rep
fi
for i in `file * |grep image|sed s/":"//g|awk '{print $1}'`
do
        let "n += 1"
        if [ -e $rep/$i ]; then
           echo "Le fichier $i existe deja dans le repertoire $rep."
        else
           taille=`identify  $i | awk '{print $3}'`
           echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
           convert -geometry $1 $i $rep/$i
        fi
done
echo $n fichiers redimensionnés

<cadre type=aparte> Attention cependant : cette version du script sélectionnera également tout fichier dont le nom contient la chaine de caractères "image". </cadre>

Redimensionnement strict d'une image

Bonjour, j'aimerais donner un détail sur cette astuce.

Pour manipuler une image, convert est un outil très puissant. Un jour, j'ai du traiter un peu plus de 1000 images de tailles diverse pour en faire des miniatures 70x50.

En faisant la manipulation classique ci-dessous, nous obtenons des miniatures ayant au moins une coordonnée de respectée. On peut donc se retrouver avec des images de 60x50, 70x55, etc ... à cause de la mise a l'échelle automatique (ce qui peut être très ennuyeux ... ou pas).

convert -resize 70x50 image_ori.png image_mini.png

la solution n'est pas très clair dans le manuel de convert mais il suffit juste d'ajouter un « ! » après votre coordonnée comme ceci :

convert -resize 70x50! image_ori.png image_mini.png

Une petite astuce simple qui peut vous faire gagner beaucoup de temps ^^.

J'ai ajouté dans le programme de Douglas SIX le support pour les png et les gif.

Merci Douglas six pour ce code, il m'est très utilse pour redimmensionner des images par lots.

Voici le code amélioré.

#!/bin/bash

if [ $# -ne 1 ] then

 echo "Usage: './resizePictures.sh taille' avec la taille sous la forme largeurxhauteur (640x480)."
 exit -1

fi

rep=resized-$1

if [ -d "$rep" ]; then

       echo "Repertoire $rep existe. Je ne le crée pas."

else

       echo "Repertoire $rep n'existe pas. Je le crée."
       mkdir $rep

fi

if [ 'ls *JPG' ]; then

       for i in *.JPG
       do
               let "n += 1"
       done
       echo "$n fichiers *.JPG existent. Je les converti."
       for i in *.JPG
       do
               if [ -e $rep/$i ]; then
                       echo "Le fichier $i existe deja dans le repertoire $rep."
               else
                       taille=`identify  $i | awk '{print $3}'`
                       echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                       convert -geometry $1 $i $rep/$i
               fi
       done

else

       echo "Aucun fichiers *.JPG n'existent. Je ne fait rien."

fi

if [ 'ls *jpg' ]; then

       for i in *.jpg
       do
               let "n += 1"
       done
       echo "$n fichiers *.jpg existent. Je les converti."
       for i in *.jpg
       do
               if [ -e $rep/$i ]; then
                       echo "Le fichier $i existe deja dans le repertoire $rep."
               else
                       taille=`identify  $i | awk '{print $3}'`
                       echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                       convert -geometry $1 $i $rep/$i
               fi
       done

else

       echo "Aucun fichiers *.jpg n'existent. Je ne fait rien."

fi

if [ 'ls *PNG' ]; then

       for i in *.PNG
       do
               let "n += 1"
       done
       echo "$n fichiers *.PNG existent. Je les converti."
       for i in *.PNG
       do
               if [ -e $rep/$i ]; then
                       echo "Le fichier $i existe deja dans le repertoire $rep."
               else
                       taille=`identify  $i | awk '{print $3}'`
                       echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                       convert -geometry $1 $i $rep/$i
               fi
       done

else

       echo "Aucun fichiers *.PNG n'existent. Je ne fait rien."

fi

if [ 'ls *png' ]; then

       for i in *.png
       do
               let "n += 1"
       done
       echo "$n fichiers *.png existent. Je les converti."
       for i in *.png
       do
               if [ -e $rep/$i ]; then
                       echo "Le fichier $i existe deja dans le repertoire $rep."
               else
                       taille=`identify  $i | awk '{print $3}'`
                       echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                       convert -geometry $1 $i $rep/$i
               fi
       done

else

       echo "Aucun fichiers *.png n'existent. Je ne fait rien."

fi

if [ 'ls *GIF' ]; then

       for i in *.GIF
       do
               let "n += 1"
       done
       echo "$n fichiers *.GIF existent. Je les converti."
       for i in *.GIF
       do
               if [ -e $rep/$i ]; then
                       echo "Le fichier $i existe deja dans le repertoire $rep."
               else
                       taille=`identify  $i | awk '{print $3}'`
                       echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                       convert -geometry $1 $i $rep/$i
               fi
       done

else

       echo "Aucun fichiers *.GIF n'existent. Je ne fait rien."

fi

if [ 'ls *gif' ]; then

       for i in *.gif
       do
               let "n += 1"
       done
       echo "$n fichiers *.gif existent. Je les converti."
       for i in *.gif
       do
               if [ -e $rep/$i ]; then
                       echo "Le fichier $i existe deja dans le repertoire $rep."
               else
                       taille=`identify  $i | awk '{print $3}'`
                       echo "Le fichier $i($taille) sera converti en $1 et enregistre dans le repertoire $rep."
                       convert -geometry $1 $i $rep/$i
               fi
       done

else

       echo "Aucun fichiers *.gif n'existent. Je ne fait rien."

fi