C'est le temps des vacances ! Plage, montagne ou road-trip... il y a maintenant des centaines de photos à redimensionner, ré-orienter et renommer Surprised !

Voici quelques scripts pour simplifier cette tâche Wink. Pensez à sauvegarder vos photos avant de faire des modifications pour éviter les erreurs de manipulation ou la perte de données.

Redimensionner et ré-orienter les photosResize and rotate pictures

Pour uploader des photos sur le web ou pour gagner de la place, on peut vouloir redimensionner ses photos. L'orientation des photos est stockée dans des metadata exif, il est également utile de corriger l'orientation des photos car de nombreux logiciels ne savent pas lire des informations (c'est le cas du diaporama de Windows XP ou de certains logiciels de gallerie photos).

Commençons par installer quelques outils pour transformer ces images.

~$ aptitude install imagemagick exiftran

Récupérez ensuite le script resizePictures.sh et changez les paramètres suivants en fonction de vos besoins :

  • PICT_EXT : l'extension de l'image (sensible à la casse)
  • MAX_PICT_WIDTH : la taille maximale de l'image (largeur pour les paysages, hauteur pour les portraits)
  • PICT_QUALITY : la qualité (paramètre de compression jpeg)
#!/bin/bash
# resizePictures.sh
# By neo73 [at] rooot [dot] net - Last modified march 2010
# Resize big pictures in a folder.
# This script requires convert and identify (from ImageMagick) and exiftran.
# USE AT YOUR OWN RISK

PICT_EXT=jpg
MAX_PICT_WIDTH=2592
PICT_QUALITY=85

function usage {
echo "Usage: $0 <folder>"
exit
}

if [ ! $# -eq 1 ]; then
usage
fi

dir=$1
if [ ! -d "$dir" ]; then
echo "Error: "$dir" is not a folder"
exit 0
fi

cd "$dir"
IFS_BAK=$IFS
export IFS='
'
for file in `ls *.$PICT_EXT`; do
args=""

echo -n '.'

# First fix orientation
orientation=$(identify -format "%[EXIF:Orientation]" "$file")
if [ "$orientation" != "1" ]; then
# convert won't update exif info so we use exiftran.
exiftran -a -i "$file"
fi

#Then resize image
convert -resize "$MAX_PICT_WIDTH>x$MAX_PICT_WIDTH>" -quality "$PICT_QUALITY" "$file" "$file"
done
echo

export IFS=$IFS_BAK

Renommer les images

Les fabriquants d'appareils photos utilisent chacun une convention différente pour nommer les fichiers. Si vous récupérez des photos de plusieurs appareils différents celà rend impossible la consultation des images dans un ordre chronologique. La meilleure façon de contourner le problème est de renommer les photos en utilisant leur date de création.

Il faut un autre outil pour lire la date de création de l'image depuis les données exif.

~$ aptitude install libimage-exiftool-perl

La prochaine étape est de vérifier que la date de création des photos est correcte. Il arrive souvent que la date soit décallée d'un appareil à l'autre ou tout simplement que la date n'ait pas été réglée sur l'appareil avant la prise de photos.

Le  script renamePictures.sh va s'occuper d'ajuster la date de création des photos puis de les renommer. Gardez les images provenant d'appareils différents dans des dossiers séparés et executez le script dans chaque dossier. Fournissez à chaque fois une date de référence et l'image de référence associée. Le script déterminera le décalage entre la date de la photo et la date réelle et appliquera cette différence à toutes les photos du dossier.

#!/bin/bash
# renamePictures.sh
# By neo73 [at] rooot [dot] net - Last modified july 2010
# Rename pictures in a folder.
# This script requires libimage-exiftool-perl.
# USE AT YOUR OWN RISK

PICT_EXT=jpg
adjustTs=0
adjustSign='+'
function usage {
echo "Usage: $0 [-d <YYYY-MM-DD hh:mm:ss> <reference_file>] <folder>"
exit
}

if [ $# -lt 1 ]; then
usage
fi
if [ $# -gt 1 ]; then
if [ "$1" != "-d" ]; then
usage
fi
if [ ! $# -eq 4 ]; then
usage
fi

referenceDate=$2
referenceFile=$3
if [ ! -f "$referenceFile" ]; then
echo "Error: "$referenceFile" is not a file"
fi
dir=$4

referenceTs=`date -d "$referenceDate" +%s`

myDate=`exiftool -TAG -CreateDate "$referenceFile" -d "%Y-%m-%d %H:%M:%S" -s -s -s`
myTs=`date -d "$myDate" +%s`

adjustTs=$(($referenceTs - $myTs))
if [ $adjustTs -lt 0 ]; then
adjustSign='-'
adjustTs=$((-$adjustTs))
fi
else
dir=$1
fi

if [ ! -d "$dir" ]; then
echo "Error: "$dir" is not a folder"
exit 0
fi

cd "$dir"


# fix picture dates
exiftool -AllDates${adjustSign}="::$adjustTs" -overwrite_original .

# rename pictures
exiftool '-FileName<${CreateDate}.jpg' -d %Y%m%d_%H%M%S *.$PICT_EXT

Maintenant que vous photos sont renommées, vous pouvez les déplacer dans le même dossier et en faire ce que bon vous semble Laughing.