Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 cool


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