« Discussion Trucs:Redimensionner des images » : différence entre les versions
mAucun résumé des modifications |
|||
Ligne 51 : | Ligne 51 : | ||
<div class="code">convert -resize 70x50 image_ori.png image_mini.png</div> | <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 | 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> | <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 ^^. | 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).
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 :
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