Table des matières

Images

Préparation des images

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

Chargement des images

Insertion Galerie dans une page