Voici une version interactive du script qui pose les questions à l’utilisateur pour chaque paramètre, ce qui le rend plus flexible et facile à utiliser sans modifier le code :
Script interactif : prepare_images_interactive.sh
dépendances (sudo apt-get install) imagemagick jpegoptim libimage-exiftool-perl
#!/bin/bash
# Demander les paramètres à l'utilisateur
read -p "Dossier source (chemin absolu) : " SOURCE_DIR
read -p "Dossier de sortie (chemin absolu) : " OUTPUT_DIR
read -p "Préfixe pour les fichiers (ex: portfolio-) : " PREFIX
read -p "Largeur max pour l'image principale (ex: 800) : " MAX_WIDTH
read -p "Qualité JPG (0-100, ex: 60) : " QUALITY
# Tailles des miniatures (comme WordPress)
THUMB_SIZES=("150x150" "300x300" "768x768")
# Créer le dossier de sortie s'il n'existe pas
mkdir -p "$OUTPUT_DIR"
# Vérifier que le dossier source existe
if [ ! -d "$SOURCE_DIR" ]; then
echo "Erreur : Le dossier source '$SOURCE_DIR' n'existe pas."
exit 1
fi
# Traiter chaque image
for img in "$SOURCE_DIR"/*.{jpg,jpeg,png}; do
if [ -f "$img" ]; then
# Nouveau nom de fichier
filename=$(basename -- "$img")
new_filename="${PREFIX}$(echo "$filename" | tr ' ' '-' | tr -d '(){}[]' | tr '[:upper:]' '[:lower:]' | sed 's/\.[^.]*$//')"
output_path="$OUTPUT_DIR/${new_filename}.jpg"
# Redimensionner et convertir en JPG (image principale)
echo "Traitement de $img..."
if [[ "$img" == *.png ]]; then
convert "$img" -resize "${MAX_WIDTH}x" -quality "$QUALITY" -strip "$output_path"
else
convert "$img" -resize "${MAX_WIDTH}x" -quality "$QUALITY" -strip "$output_path"
fi
# Générer les miniatures
for size in "${THUMB_SIZES[@]}"; do
thumb_path="$OUTPUT_DIR/${new_filename}-${size}.jpg"
convert "$output_path" -resize "$size^" -gravity center -extent "$size" -quality "$QUALITY" -strip "$thumb_path"
echo " Miniature générée : ${new_filename}-${size}.jpg"
done
# Optimiser l'image principale et les miniatures
jpegoptim --max="$QUALITY" --strip-all "$output_path" >/dev/null 2>&1
for size in "${THUMB_SIZES[@]}"; do
thumb_path="$OUTPUT_DIR/${new_filename}-${size}.jpg"
jpegoptim --max="$QUALITY" --strip-all "$thumb_path" >/dev/null 2>&1
done
# Supprimer les métadonnées
exiftool -all= "$output_path" >/dev/null 2>&1
for size in "${THUMB_SIZES[@]}"; do
thumb_path="$OUTPUT_DIR/${new_filename}-${size}.jpg"
exiftool -all= "$thumb_path" >/dev/null 2>&1
done
echo "Image traitée : ${new_filename}.jpg"
fi
done
echo "Toutes les images et leurs miniatures ont été générées dans $OUTPUT_DIR"
Comment utiliser ce script ?
Rends le script exécutable :
chmod +x prepare_images_interactive.sh
Lance-le :
./prepare_images_interactive.sh
Réponds aux questions :
Dossier source (ex: /home/utilisateur/Images/projet)
Dossier de sortie (ex: /home/utilisateur/Images/optimisees)
Préfixe (ex: portfolio-)
Largeur max (ex: 800)
Qualité JPG (ex: 60)
Exemple d’exécution :
$ ./prepare_images_interactive.sh Dossier source (chemin absolu) : /home/moi/Images/projet Dossier de sortie (chemin absolu) : /home/moi/Images/optimisees Préfixe pour les fichiers (ex: portfolio-) : monprojet- Largeur max pour l'image principale (ex: 800) : 1024 Qualité JPG (0-100, ex: 60) : 70 Traitement de /home/moi/Images/projet/mon image.jpg... Miniature générée : monprojet-mon-image-150x150.jpg Miniature générée : monprojet-mon-image-300x300.jpg Miniature générée : monprojet-mon-image-768x768.jpg Image traitée : monprojet-mon-image.jpg Toutes les images et leurs miniatures ont été générées dans /home/moi/Images/optimisees