#1 Le 02/05/2015, à 18:02
- buntu35
conversion de photos en masse en conservant la date de creation
Bonjour à tous.
Avec la photo numérique, on shoote à tour de bras et on se retrouve avec des milliers de photos (que l'on regarde que rarement après...ça c'est une autre histoire). De ces milliers de photo naissent des giga-octects, qui faut stocker et avoir des copies de sauvegarde...
Le problème c'est le poids !
Avoir des photos 4000x3000 pixels est-ce bien utile pour des clichés de famille ou de vacances ? Pour des photographes amateurs ou semi-pro, c'est pas pareil bien sûr.
Pour ma part, j'ai eu la nécessité de convertir mes photos en une résolution plus basse en utilisant "convert" de package imagemagick en faisant un truc comme çà qui me convenait très bien :
convert -quality ${QUALITY_JPEG} -resize ${format_dst} ${name_src} jpeg:${name_dst}
Cependant, quelques soucis :
-1- il y a des photos avec une orientation paysage d'autre en portrait
-2- via la commande "convert", je perdais la date de création de la photo mais pas les données EXIF.
J'ai donc réalisé ce petit script permettant de convertir en masse une arborescence de photos. Toutes les photos trouvées ayant une dimension supérieure à un seuil configurable sont converties en prenant en compte l'orientation et en écrasant la photo originale et en conservant la date de création du fichier photo.
Le script lancé sans argument lance la conversion depuis le répertoire courant.
Le script lancé avec un répertoire en argument lance la conversion pour ce répertoire (s'il existe)
ça vaut ce que ça vaut, sans doute pas parfait mais ça satisfait mon modeste cahier des charges.
#!/bin/bash
#============================
# conversion cible
#============================
LONG=1600
LARG=1200
QUALITY_JPEG=90
#============================
resize_jpg ()
{
name_src=${1}
format_dst=${2}
old_format=${3}
name_dst=${name_src}
DATE_CREATED=$(date -r "${name_src}" +%Y%m%d%H%M.%S)
echo "convertion ${name_src} en ${format_dst} (${old_format})"
convert -quality ${QUALITY_JPEG} -resize ${format_dst} ${name_src} jpeg:${name_dst}
touch -t ${DATE_CREATED} ${name_dst}
}
#==========================================
# main
DEBREP="."
if [ $# -eq 1 ]
then
DEBREP=$1
if [ ! -d ${DEBREP} ]
then
echo erreur : ${DEBREP} inexistant
exit 1
fi
fi
for f in $(find ${DEBREP} | grep -E "jpg|JPG" )
do
format=$(identify "${f}" | awk -F ' ' '{ print $3 }')
if [ "${format}" != "" ]
then
L1=$(echo $format | awk -F 'x' '{ print $1 }')
L2=$(echo $format | awk -F 'x' '{ print $2 }')
if [ ${L1} -gt ${L2} ]
then
if [ ${L1} -gt ${LONG} ]
then
resize_jpg "${f}" "${LONG}x${LARG}" "${format}"
fi
else
if [ ${L2} -gt ${LONG} ]
then
resize_jpg "${f}" "${LARG}x${LONG}" "${format}"
fi
fi
else
echo "${f} non identifié"
fi
done
echo "fin"
bonnes conversions...
buntu
Un système complexe qui fonctionne provient nécessairement d'un système simple qui a fonctionné.
La proposition inverse est aussi vraie : un système complexe construit à partir de zéro ne fonctionne jamais et ne peut pas être modifié pour fonctionner.
Hors ligne