Créer une version allégée d'un lot d'image par une ligne de commande

Bonjour - Une fois développées de nombreuses photos ne seront vues que sur écran de PC ou de smartphone pour lesquels la résolutions ne dépasse pas souvent (?) les 1920X1080

Vu que les “linuxien” étant bien représentée parmis les utilisateurs d’ART j’en profite pour demander (et proposer) une solution permettant de réduire la taille des tirages en ligne de commande (ce que je trouve souvent plus pratique qu’à travers une interface graphique)

La méthode que j’empoie pour cela étant d’ouvrir un terminal (par un clic droit ) dans le dossier qui contient les images à traiter et de lancer :

find . -name ‘.jpg’ -exec mogrify -resize 1920x1080> {} ; -exec jpegoptim --strip-all --max=80 {} ; && find . -name '.jpeg’ -exec mogrify -resize 1920x1080> {} ; -exec jpegoptim --strip-all --max=80 {} ; && find . -name ‘*.png’ -exec mogrify -resize 1920x1080> {} ; -exec optipng -strip all -o2 {} ;

Attention - dans cette version Mogrify va remplacer la version d’origine par sa version réduite - il est possible de changer ce comportement https://doc.ubuntu-fr.org/imagemagick

Si vous avez mieux en terme de ratio qualité / poids qui permet de conserver les rapports (hauteur - largeur) - je suis preneur

Salut, intéressant ton script. Je me suis permis de l’évaluer et l’optimiser par ChatGpt, pour ne pas remplacer les photos mais les dupliquer au format souhaité.
Voici ce qu’il me propose, si tu veux le tester et nous dire…?

#!/bin/bash

# Créer un répertoire de destination s'il n'existe pas déjà
mkdir -p resized_images

find . -type f \( -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' \) -exec sh -c '
    # Créer le chemin de destination
    destination="resized_images/$(basename "$0")"
    
    # Dupliquer l'image dans le répertoire de destination
    cp "$0" "$destination"

    # Redimensionner l'image dans le répertoire de destination
    mogrify -resize 1920x1080 -quality 80 "$destination"

    # Optimiser les images JPEG dans le répertoire de destination
    if [[ "$destination" == *.jpg || "$destination" == *.jpeg ]]; then
        jpegoptim --strip-all --max=80 "$destination"
    fi

    # Optimiser les images PNG dans le répertoire de destination
    if [[ "$destination" == *.png ]]; then
        optipng -strip all -o2 "$destination"
    fi
' {} \;

Le script précédent ne fonctionne pas chez moi ! voici une autre version qui fonctionne avec succès ! ( Je suis sur zsh).

#!/bin/zsh

# Créer un répertoire de destination s'il n'existe pas déjà
mkdir -p resized_images

# Trouver toutes les images et itérer sur chaque fichier
find . -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' \) -print0 | while IFS= read -r -d '' file; do
    # Créer le chemin de destination
    destination="resized_images/$(basename "$file")"
    
    # Dupliquer l'image dans le répertoire de destination
    cp "$file" "$destination"

    # Redimensionner l'image dans le répertoire de destination
    mogrify -resize 1920x1080 -quality 80 "$destination"

    # Optimiser les images JPEG dans le répertoire de destination
    if [[ "$destination" == *.jpg || "$destination" == *.jpeg ]]; then
        jpegoptim --strip-all --max=80 "$destination"
    fi

    # Optimiser les images PNG dans le répertoire de destination
    if [[ "$destination" == *.png ]]; then
        optipng -strip all -o2 "$destination"
    fi
done

Je fais régulièrement ça en batch avec xnviewMP. ça me parait plus simple!

Merci de m’avoir rappelé l’existence de xnview que je viens d’installer.
Même si ce n’était pas mon idée de départ (une simple ligne de commande) - le module d’export dans le traitement par lot est simple, complet et efficace (ratio avant/après) .

Et avec une sortie “verbeuse” des résultats de la commande que j’apprécie vraiment.

PS Par défaut les préférence de ré échantillonnage sont positionné sur Lanczos - Est celui qui permet un plus grande compression ?

Je n’ai pas vraiment fait de comparaison entre les différents algorithmes de compression, car il faut aussi tenir compte de la qualité en sortie. Donc, je reste sur le défaut. Je coche la correction gamma pour faire les interpolations dans un espace linéaire.
Je rajoute un peu de netteté avec la fonction sharpen .
Comme je sors les JPG de ART dans la meilleure qualité jpg possible, je baisse la qualité jpg , par ex 80.

C’est peut-être un peu à côté du sujet, mais avec ART (comme RT) on a la possibilité de faire un export rapide, pour lequel on peut définir une résolution (Paramètres → Performance → Export rapide). Mais on sait que l’ordre du pipeline pour ce qui est du redimensionnement est différent (les traitements sur le raw sont appliqués après le redimensionnement, ce qui fait que l’export est plus rapide).

Autre possibilité, pour ne pas avoir le traitement après le redimensionnement, c’est de créer un profil partiel .arp avec le redimensionnement souhaité, de mettre les fichiers dans la file d’attente et d’y cocher la case “Appliquer le profil suivant à l’export” en indiquant le profil partiel créé précédemment.

1 « J'aime »