#!/bin/bash # This software is governed by the CeCILL license under French law and # abiding by the rules of distribution of free software. You can use, # modify and/ or redistribute the software under the terms of the CeCILL # license as circulated by CEA, CNRS and INRIA at the following URL # "http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt". # # Ce logiciel est régi par la licence CeCILL soumise au droit français et # respectant les principes de diffusion des logiciels libres. Vous pouvez # utiliser, modifier et/ou redistribuer ce programme sous les conditions # de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA # à l'adresse "http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt". # # Copyright Cyril Ravat, (2007-2011) # Website : http://www.cyril-ravat.fr/scripts/redim.php # Help : redim -h # Options par défaut # Qualité d'enregistrement JPEG (entre 0 et 100) QUALITE=90 # Dimension maximale en pixels DIMENSION=1600 # Mode récursif RECUR= # Options du script while getopts ":hq:d:" option do case $option in "h") echo "Usage : $(basename "$0") [-q qualité] [-d dimension] origine destination" echo " $(basename "$0") -h" echo echo -e "Redimensionne les images de type JPEG contenues dans le répertoire \033[1morigine\033[0m et" echo -e "place le résultat dans le répertoire \033[1mdestination\033[0m. Tout fichier non JPEG est" echo "recopié à l'identique. Si le répertoire de destination est terminé par un slash," echo "un répertoire du nom du répertoire d'origine y est créé. Le comportement est récursif." echo echo -e "La \033[1mqualité\033[0m est la qualité JPEG de redimensionnement. Elle doit être comprise" echo "entre 0 et 100 (valeur par défaut $QUALITE)." echo -e "La \033[1mdimension\033[0m est la grande dimension des images à laquelle elles sont" echo "redimensionnées (valeur par défaut $DIMENSION). Les images sont uniquement réduites," echo "les images originales trop petites sont recopiées à l'identique." echo echo "Options :" echo -e " \033[1m-h\033[0m : afficher cette aide" echo exit 0 ;; "q") QUALITE=$OPTARG ;; "d") DIMENSION=$OPTARG ;; "?|:") break ;; esac done shift $((OPTIND-1)) # Si moins de deux arguments, affichage de l'aide if [ $# -lt 2 ] ; then echo "Il faut au moins deux arguments. L'option -h permet d'afficher l'aide." exit 1 fi # Vérification de l'utilitaire imagemagick if [ -z `which identify` ]; then echo -e "L'utilitaire \033[1midentify\033[0m n'existe pas." echo -e "Il faut installer le paquet \033[1mimagemagick\033[0m." exit 1 fi # Vérification de l'existence des répertoires [ ! -d "$1" ] && echo "Erreur : $1 n'est pas un répertoire valide." && exit 2 [ ! -d "$2" ] && echo "Erreur : $2 n'est pas un répertoire valide." && exit 2 # Copie des arguments et suppression des derniers "/" éventuels ORIGINE="${1%/}" [ ${2:(-1)} != "/" ] && DESTINATION="$2" || DESTINATION="$2${ORIGINE##*/}" # Création du répertoire de destination si besoin (si erreur lors de la # création, sortie avec erreur) [ -d "$DESTINATION" ] || mkdir -p "$DESTINATION" || exit 3 for i in "$ORIGINE"/*; do j="$DESTINATION/$(basename "$i")" # Traitement des répertoires if [ -d "$i" ]; then [ -d "$j" ] || mkdir -p "$j" echo "Répertoire $i" $0 -q $QUALITE -d $DIMENSION "$i" "$j" continue fi # Traitement des images EXT=`echo "${j##*.}" | tr [:upper:] [:lower:]` if [ "$EXT" = "jpg" ] || [ "$EXT" = "jpeg" ]; then # On vérifie les dimensions infos=(`identify -format "%m %w %h" "$i"`) if [ "${infos[1]}" -le "$DIMENSION" ] && [ "${infos[2]}" -le "$DIMENSION" ]; then echo "Image $i : trop petite pour être redimensionnée, copie à l'identique" cp -p "$i" "$j" else echo "$i -> $j" convert -resize "$DIMENSION"x"$DIMENSION" -quality "$QUALITE" "$i" "$j" fi # On utilise les données EXIF pour remettre le fichier à l'heure. # ATTENTION : ne fonctionne pas avec la version 6.3.7 d'Imagemagick TIME=`identify -format "%[EXIF:DateTimeOriginal]" "$j" 2>/dev/null` [ -z "$TIME" ] && TIME=`identify -format "%[EXIF:DateTime]" "$j" 2>/dev/null` # Work around pour la version 6.3.7 d'Imagemagick (jusqu'à Ubuntu Intrepid par exemple) [ -z "$TIME" ] && TIME=`identify -format "%[exif:*]" "$j" 2>/dev/null | sed -n "/DateTimeOriginal=/s/exif:DateTimeOriginal=//p"` [ -z "$TIME" ] && TIME=`identify -format "%[exif:*]" "$j" 2>/dev/null | sed -n "/DateTime=/s/exif:DateTime=//p"` [ -n "$TIME" ] && TIME=`echo "${TIME:0:16}.${TIME:17}" | tr -d ': '` && touch -m -t "$TIME" "$j" 2>&1 # Traitement des autres types de fichiers else echo "Fichier $i : type non reconnu, copie à l'identique" cp -p "$i" "$j" touch -m -r "$j" "$i" fi done