Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

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.

#1 Le 03/01/2017, à 20:59

alberto33

Petit amateur de photos, mais exigeant, je ne veux plus galérer.

...QUELQUES SCRIPTS EN COMPLEMENT DES GRAND LOGICIELS...

Bonjours à tous,

Je n'ai pas de grandes ambitions dans la manipulation des photos, juste quelques besoins qui me semblent basiques et légitimes :
       - pouvoir documenter les photos (Où, quand, qui sur la photos, qui est l'auteur, quoi, et parfois une anecdote) 
       - pouvoir agir aussi bien sur des photos numériques, que d'anciennes photos scannéees
       - pouvoir faire partager certaines photos avec toute leur doc à des personnes qui n'ont pas les mêmes outils que moi, voire rien du tout.
       - garantir une bonne pérenité de mon effort de documentation
       - retoucher basiquement certaines photos (orientation, cadrage, lumière)
       - garder mon indépendance (non merci les "big brothers" !)

Malheureusement j'ai découvert qu'il n'existe pas de logiciel qui aille jusqu'au bout de ces besoins. Dans un premier temps et après une évaluation des offres, j'ai décidé d'utiliser les logiciels qui s'imposent à l'utilisateur lambda d'Ubuntu au jour d'aujourd'hui : shotwell pour gérer la photothèque et les retouches de photos, nautilus pour manipuler les fichiers, et image viewer. J'ai découvert que les gestionnaires de photos (shotwell ou autres) modifiaient de façon parfois imprévisible, à tort ou à raison, certaines métadonnées (comme la date de prise de vue, l'orientation). Et c'est vraiment rageant quant il faut resaisir ces données, ou les remettre en cohérence (par exemple il y a plusieurs données possibles pour l'orientation). Inclure la date de prise de vue dans le nom étant recommandé par certain pro (et bien justifié), j'ai aussi découvert qu'il n'est pas simple de la restaurer, si c'est nécessaire, à partir du nom du fichier photo car l'outil qui le fait, exiftool (le seul ?), fait feu de tout bois : tout nombre présent dans le nom est transformé en date !

J'ai donc créé quelques scripts qui viennent en complément des grands logiciels de manipulation de photos, et palient aux problèmes que je rencontre. J'ai pu ainsi établir un PROTOCOLE COMPLET DE PRISE EN CHARGE DES PHOTOS. Comme je ne pense pas être le premier à buter sur ces difficultés, je met à disposition cette proposition d'amélioration, même si elle relève beaucoup de l'amateurisme. Enfin elle marche.

Voici en quoi consistent ces scripts qui viennent en complément du gestionnaire de photothèque (shotwell, mais ce n'est pas impératif) et nautilus :

- Ce sont des scripts bash tous disponibles via nautilus (sélection d'un groupe de fichier / clic droit / script / Photo), de sorte qu'on les applique sur le groupe de fichiers
(vous trouverez peut-être que certaine lignes affichées sont "décalées" ; cela provient de l'utilisation de l'éditeur gedit, dont je donne le paramétrage dans chaque script pour obtenir un affichage correct)

- Script n°1 : il produit une édition des métadonnées (exif et autres) sur un fichier .csv (lisible par LibreOffice Calc) ; il contient en particulier les dates de prise de vue et l'orientation des photos. Il sécurise ces données, le temps d'effectuer diverses corrections, additions sur les photos.

 #!/bin/bash
#AUTEUR : 						alberto33 (forum.ubuntu-fr.org)
#NOM :								1.ExifEdition
#VERSION :		 				31/12/2016 : version 0.1 pour scripts Nautilus
#DESCRIPTION :	Edition de certaines métadonnées de la photo. En particulier les données Exif DateTimeOriginal et Orientation 
#								A noter : il peut exister plusieurs paramètres Orientation ; vérifier qu'il sont identiques (IMPERATIF !)
#								Le résultat figure dans le fichier EXIF_data.csv
#LOGICIELS REQUIS : imagemagick, exiftool, zenity 
#										(qualification sous Ubuntu 14.04, imagemagick 6.7.7-10)
#PRE-REQUIS :		format jpeg
#								(Police de l'éditeur de texte : courrier 10 pitch 12)
#PARAMETRE 1 : 	liste des noms des images jpeg sélectionnées dans Nautilus
#-----------------------------------------------------------------------------------------------------------------------
# set -nvx									#	n=>vérif syntaxe v=>affiche cmdes avant éxé x=> affiche résultat de cmdes  																			
# set -x										# Mettre en commentaire pour éxécution standard
# exec >./journal.txt 2>&1	# le compte-rendu d'éxécution est dirigé dans journal.txt - Mettre en commentaire
#-----------------------------------------------------------------------------------------------------------------------
#
echo "fichier;%W%H;%W%H%X%Y;width;height;date originale;orientations"  > EXIF_data.csv
#
# Commande destinée à une utilisation dans le navigateur de fichiers Nautilus 
# Les chemins des fichiers sélectionnés dans Nautilus sont ligne à ligne			 
IFS=$'\n'     																											# le séparateur interne de champs (IFS) sera limité à LineFeed
																																		#Utile pour analyser NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

for Photo in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ;
do
EXIFdate=$(identify -format "%[EXIF:DateTimeOriginal]" $Photo)				#date de prise de vue
EXIFG=$(identify -format %G $Photo)																		#G=largeur x hauteur (%W%H%X%Y)
																																			#(l'extraction "%[Exif:ExifImageWidth]"  ou %w n'est pas valables sur toutes les photos)
EXIFg=$(identify -format %g $Photo)	
EXIFw=$(identify -format "%w" $Photo)	
EXIFh=$(identify -format %h $Photo)	
EXIFtoutes=$(exiftool -a -n -orientation $Photo)							#0, 1 ou 2 champs existent pour l'orientation !
																															#exiftool : -a toutes les valeurs, et si -n format numérique
EXIFtoutesORIENT=$(echo $EXIFtoutes | tr -d '\n')
echo "$(basename $Photo);$EXIFG;$EXIFg;$EXIFw;$EXIFh;$EXIFdate;$EXIFtoutesORIENT" >> EXIF_data.csv
done
zenity --info --text "         FIN \n Résultats dans EXIF_data.csv" 
exit 

- Script n°2 : il restaure les données date de prise de vue et orientation à partir du fichier produit par le script n°1 (qu'on aura modifié si nécessaire)

 #!/bin/bash
#AUTEUR : 						alberto33 (forum.ubuntu-fr.org)
#NOM :								2.ExifRestauration
#VERSION :		 				31/12/2016 : version 0.1 pour scripts Nautilus
#DESCRIPTION :	Restauration de certaines métadonnées de la photo. En particulier les données Exif DateTimeOriginal et 
#								Orientation. Les données de références sont celles contenues dans le fichier Exif_data.csv généré par 
#								ExifEdition, et modifiables manuellement. 
#LOGICIELS REQUIS : imagemagick, zenity, exiftool
#										(qualification sous Ubuntu 14.04, imagemagick 6.7.7-10)
#PRE-REQUIS :		format jpeg
#								(Police de l'éditeur de texte : courrier 10 pitch 12)
#PARAMETRE 1 : liste des noms des images jpeg sélectionnées dans Nautilus
#-----------------------------------------------------------------------------------------------------------------------
# set -nvx										#	n=>vérif syntaxe v=>affiche cmdes avant éxé x=> affiche résultat de cmdes  																			
# set -x											# Mettre en commentaire pour éxécution standard
# exec >./journal.txt 2>&1		# le compte-rendu d'éxécution est dirigé dans journal.txt - Mettre en commentaire
#-----------------------------------------------------------------------------------------------------------------------
#
Exif_data_chemin=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed -e 's/ \/home.*//')
ExifRestaur_journal="$(dirname "$Exif_data_chemin")/ExifRestaur_journal"
Exif_data_chemin="$(dirname "$Exif_data_chemin")/EXIF_data.csv"
if [ ! -f "$Exif_data_chemin" ]; then
		zenity --info --text "Le fichier $Exif_data_chemin est requis.\n\nIl est généré par le script Nautilus : ExifEdition"
		exit 0
fi 
#
# Paragraphe destiné à une utilisation dans le navigateur de fichiers Nautilus
# Les chemins des fichiers sélectionnés dans Nautilus sont ligne à ligne			
IFS=$'\n'     																											# le séparateur interne de champs (IFS) sera limité à LineFeed
																																		#Utile pour analyser NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

NbRestaur=0
for Photo in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ;
do
EXIFdate=$(identify -format "%[EXIF:DateTimeOriginal]" $Photo)				#date de prise de vue
Exif_champs=$(grep "$(basename $Photo)" "$Exif_data_chemin")
if [ -z "$EXIFdate" ]; then
	if [ -z $Exif_champs ]; then 
		zenity --info --text "La restauration de la date n'est pas possible pour $Photo. \n\n\
Ce fichier n'existe pas dans $Exif_data_chemin ou bien son nom contient des caractères spéciaux (comme [, ]...)"
	else	
		DateOriginale=$(expr match "$Exif_champs" '.*\([0-9]\{4\}:[0-9][0-9]:[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)')		
		if [ -z $DateOriginale ]; then
			zenity --info --text "La restauration de la date n'est pas possible pour $Photo. \n\n\
Ce fichier existe dans $Exif_data_chemin, mais sans date"
		else	
			exiftool -DateTimeOriginal=$DateOriginale -overwrite_original $Photo 2>>$ExifRestaur_journal
			if [ "$?" -ne 0 ]; then
				zenity --info --text "$Photo Erreur dans la mise à jour de la date \n
Voir détail dans ExifRestaur_journal. Essayer une mise à jour manuelle avec Shotwell ?"		
			else
				let NbRestaur=NbRestaur+1
			fi
		fi
	fi	
fi
#ORIENT=$(identify -format %[orientation] $Photo)
#if [[ $ORIENT = 'Undefined' || $ORIENT = '' ]]; then
#		exiftool -Orientation=1 -n -overwrite_original $Photo 
#elif [ ! "$ORIENT" = 'TopLeft' ]; then mogrify -auto-orient $Photo ; fi		# standardisation de l'orientation
#
ORIENTpos34=''
ORIENTpos70=''
if [ ${Exif_champs:(-35):11} = 'Orientation' ]; then ORIENTpos34=${Exif_champs:(-1):1} ; fi
if [ ${Exif_champs:(-71):11} = 'Orientation' ]; then ORIENTpos70=${Exif_champs:(-37):1} ; fi
#
if [[ $ORIENTpos34 = '' && $ORIENTpos70 = '' ]]; then
		exiftool -Orientation=1 -n -a -overwrite_original $Photo 
elif [[ $ORIENTpos34 != '' && $ORIENTpos70 = '' ]]; then
		exiftool -Orientation=$ORIENTpos34 -n -a -overwrite_original $Photo
elif [[ $ORIENTpos34 = $ORIENTpos70 ]]; then
		exiftool -Orientation=$ORIENTpos34 -n -a -overwrite_original $Photo
elif [[ $ORIENTpos34 != $ORIENTpos70 ]]; then
		zenity --info --text "Dans le fichier Exif_data.csv, les 2 valeurs pour l'orientation ne sont pas identiques pour $Photo"\
						"\n\nLes cas suivants sont aussi admis : aucune valeur, ou une seule valeur"\		
						"\n\nCommande pour consulter les valeurs : exiftool -a [-n] -orientation photo.jpg"
fi
done
zenity --info --text "Date restaurée pour $NbRestaur photos" 
exit
  

- Script n°3 : il renomme les fichiers en utilisant la date de prise de vue, un compteur alphabétique (3 lettres) et un nom d'auteur. On obtient ainsi un nommage homogène de toutes ses photos, d'où qu'elles viennnent.

 #!/bin/bash
#AUTEUR : 				alberto33 (forum.ubuntu-fr.org)
#NOM :						3.RenommerPhotos
#VERSION :		 		31/12/2016 : version 0.1 pour scripts Nautilus
#DESCRIPTION :		Renommer les photos jpeg en AAAA-MM-JJ-hhmmss_abc_auteur.jpg
#+ 								Le numéro abc est alphabétique (3 lettres) afin de ne pas être interprété comme un élément de date
#+								par d'autres logiciels (par ex exiftool) 
#+ 								Ce compteur doit figurer dans le fichier compteur.txt (derniers 3 caractères de la dernière ligne)
#+ 								qu'on INITIALISE à aaa (=000) (exemple : ftb=6x26²+20x26+1=4577)
#+ 								L'auteur est choisi via ce script, puis inséré dans le nom dde fichier ainsi que dans les données Exif
#LOGICIELS REQUIS : imagemagick, zenity, exiftool
#										(qualification sous Ubuntu 14.04, imagemagick 6.7.7-10)
#PRE-REQUIS :		format jpeg ; la photo doit posséder une donnée date de création (Exif:DateTimeOriginal) non nulle
#								(Police de l'éditeur de texte : courrier 10 pitch 12)
#PARAMETRE 1 : liste des noms des images jpeg sélectionnées dans Nautilus
#-----------------------------------------------------------------------------------------------------------------------
# set -nvx									#	n=>vérif syntaxe v=>affiche cmdes avant éxé x=> affiche résultat de cmdes  																			
# set -x										# Mettre en commentaire pour éxécution standard
# exec >./journal.txt 2>&1	# le compte-rendu d'éxécution est dirigé dans journal.txt - Mettre en commentaire
#-----------------------------------------------------------------------------------------------------------------------
#
journal=~/.local/share/renommerphotos/journal.txt
compteur=~/.local/share/renommerphotos/compteur.txt

zenity --info  --text "Les photos jpeg sont renommées en AAAA-MM-JJ-hhmmss_abc_auteur.jpg, soit \n\
                - la date de création originale (EXIF:DateTimeOriginal) \n\
                - un numéro unique composé de 3 lettres \n\
		- le nom de l'auteur\n\n\
La numérotation alphabétique (base 26) est mémorisée dans $compteur\n\n\
Le nom de l'auteur est inséré dans les métadonnées Exif du fichier.\n
Pour modifier le nom de l'auteur : le supprimer du nom du fichier pour obtenir AAAA-MM-JJ-hhmmss_abc_.jpg et relancer ce script\n\n
Cas particulier où le nom de fichier n'est pas modifié :\n\
					- il est déjà précédé de la date originale,\n\
		      			- la date originale n'existe pas \n\n
Rapport d'éxécution dans $journal"

Auteur=$(zenity --list --title="Choisissez l'auteur du groupe de photos" \
--column "Noms à compléter si nécessaire (modifier le script)" \
prenom1-nom1 prenom2-nom2 \
 "Je vais mettre à jour la liste dans le script" )
if [ "$Auteur" = 'Je vais mettre à jour la liste dans le script' ] || [ "$Auteur" = '' ]; then exit ; fi

# Indicateur d'absence de date pour au moins un fichier 
DateAbsente=0
# Compteur du nombre de renommages effectués
CptRenom=0
# indicateur de divergence entre l'auteur exif présent dans le fichier et celui choisi dans la liste zenity
DivergenceAuteur=0
# =============================================================================

function Terminer {
if [ "$DateAbsente" = '1' ]; then
		zenity --info --text "Certains fichiers ne possèdent pas de date. \n VOIR LISTE dans $journal"
fi
if [ "$CptRenom" -gt 0 ]; then
		echo " $(date +%F_%T) Nombre de fichiers renommés : $CptRenom ; Dernier index de numérotation (base 26) : "\
					"$CptAlphaP2"$CptAlphaP1"$CptAlphaP0" >> $compteur
fi
if [ "$DivergenceAuteur" = 1 ]; then
		zenity --info --text "Certains fichiers possèdaient un auteur différent de celui choisi à l'éxécution.\
		 \n VOIR LISTE dans $journal"
fi
rm ${compteur}w
zenity --info --text "Nombre de fichiers renommés : $CptRenom" ;
}

function ControlAuteur {
ExifAuteur=$(echo $(exiftool -Author "$Photo") | sed -e 's/^.*: //')
if [[ "$Auteur" != "$ExifAuteur" && "$ExifAuteur" != '' ]]; then
		DivergenceAuteur=1
		echo "$(date +%F_%T) $Photo Divergence sur l'auteur. Ancien= $ExifAuteur ; nouveau= $Auteur" >> $journal        
fi
exiftool -Author="$Auteur" -overwrite_original $Photo 2>> $journal
if [ "$?" -ne 0 ]; then
		zenity --info --text "ERREUR dans la mise à jour de l'auteur pour $Photo\n
Voir détail dans $journal"
fi ;
}

function  CalculDate  {
Date=$(identify -format "%[EXIF:DateTimeOriginal]" $Photo)
if [ "$Date" = '' ]; then
	echo "$(date +%F_%T) $Photo ne comporte pas de date (exif:datetimeoriginal)" >> $journal
	DateAbsente=1
	else
		Date=$(echo $Date | sed -e 's/[ T]03:03:03//') 			#siAAAA:MM:JJ on a généré AAAA:MM:JJ 03:03:03	(convention perso)				
		Date=$(echo $Date | sed -e 's/:02[ T]02:02:02//')		#siAAAA:MM on a généré AAAA:MM:02 02:02:02
		Date=$(echo $Date | sed -e 's/:01:01[ T]01:01:01//')	#siAAAA on a généré AAAA:01:01 01:01:01
		Date=$(echo $Date | sed -e 's/^\([0-9]\{4\}\):\([0-9]\{2\}\)$/\1\-\2/')   # remplacement : par - (cas AAAA-MM)
		Date=$(echo $Date | sed -e 's/\([0-9]\{4\}\):\([0-9]\{2\}\):\([0-9]\{2\}\)/\1\-\2\-\3/') 				# cas AAAA-MM-JJ
		Date=$(echo $Date | sed -e 's/://g') 					  # suppression des : dans la partie horaire
		Date=$(echo $Date | sed -e 's/ /-/')
fi ;
}

function IncrementerChiffre {
TabChiffres=( {a..z} a )
index=0
while [ "$Chiffre" != ${TabChiffres[index]} ]
do
let index=$index+1
done
let index=$index+1
Chiffre=${TabChiffres[index]} ;
}

function IncrementerCA {
if [[ "$CptAlphaP0" = 'z' && "$CptAlphaP1" = 'z' && "$CptAlphaP2" = 'z' ]]; then
	zenity --info --text "Le compteur alphabétique (aaa) associé aux dates est saturé (valeur = zzz)\
												 Le traitement ne peut se poursuivre !!!!!!"
	Terminer	
	exit 1
	fi 
let CptRenom=CptRenom+1
Chiffre=$CptAlphaP0
IncrementerChiffre
CptAlphaP0=$Chiffre
if [ "$Chiffre" = a ]  ; then
	Chiffre=$CptAlphaP1
	IncrementerChiffre
	CptAlphaP1=$Chiffre
	if [ "$Chiffre" = a ]  ; then
		Chiffre=$CptAlphaP2
		IncrementerChiffre
		CptAlphaP2=$Chiffre 
	fi
fi ;
}

# =============================================================================
# Initialiser CptAlpha compteur en base 26 (a b c d ...z) (a=0 aaa=000 caa=2x26²)
#+ pour nommer les fichiers (par concaténation avec la date)
#+ Le comptage s'enchaîne d'une éxécution du script à la suivante
tail -1 $compteur > ${compteur}w
if [ ! $? = 0 ]; then 
	zenity --info --text "Le fichier $compteur est absent. Traitement impossible.\n\nConsulter\
 ce script pour plus de détails sur le contenu requis de ce fichier"
	exit 1
fi
# exec 0<${compteur}w
read CptAlpha 0<${compteur}w
let pos=${#CptAlpha}-1
CptAlphaP0=${CptAlpha:$pos:1}
let pos=pos-1
CptAlphaP1=${CptAlpha:$pos:1}
let pos=pos-1
CptAlphaP2=${CptAlpha:$pos:1}

IFS=$'\n'     																											# le séparateur interne de champs (IFS) sera limité à LineFeed
																																		#Utile pour analyser NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
for Photo in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ;
do
cd $(dirname $Photo)
if [[ $(expr match "$Photo" '.*\(...\)') = 'jpg'  || $(expr match "$Photo" '.*\(...\)') = 'JPG' \
			|| $(expr match "$Photo" '.*\(....\)') = 'jpeg'  || $(expr match "$Photo" '.*\(....\)') = 'JPEG' ]]; then			
		CalculDate
		if [ ! "$Date" = '' ] ; then		
			NomFich=$(basename $Photo)
			if [[ "$NomFich" =~ ^[0-9]{4}-[0-1][0-9]-[0-3][0-9]-[0-9]{6}_[a-z]{3}_.*\.jpg$ ]]; then		
					CptAlphaW=${NomFich:18:3}
					if [ ! "$NomFich" = "$Date"_"$CptAlphaW"_"$Auteur".jpg ]; then
							mv $Photo ${Date}_${CptAlphaW}_${Auteur}.jpg
							Photo=${Date}_${CptAlphaW}_${Auteur}.jpg
							let CptRenom=CptRenom+1
					fi
			else
					IncrementerCA
					mv $Photo ${Date}_${CptAlphaP2}${CptAlphaP1}${CptAlphaP0}_${Auteur}.jpg
					Photo=${Date}_${CptAlphaP2}${CptAlphaP1}${CptAlphaP0}_$Auteur.jpg
			fi
			ControlAuteur
		fi
fi
done
Terminer
exit 0
  

- Script n°4 : LE PRINCIPAL : il ajoute une légende à chaque photo à partir de la date de prise de vue, et des mots-clés, titre et commentaire introduits via shotwell. Il met éventuellement la date de prise de vue à jour si une date est détectée dans les mots-clés (très pratique pour des photos anciennes dont on n'a qu'une idée partielle (année plus éventuellement mois et jour)).

 #!/bin/bash
#AUTEUR : 						alberto33 (forum.ubuntu-fr.org)
#NOM :								4.LegenderPhotos
#VERSION :					  31/12/2016 : version 0.1 pour scripts Nautilus
#DESCRIPTION :	Ajout d'une légende aux photos
# 							La légende ajoutée au pied de chaque photo est composée des métadonnées de la 
#								photo, si elles existent :
#																	- le titre suivi du commentaire
#																	- les tags (cadrés à gauche) et la date (cadrée à droite)
#								Exception : si un tag est une date (aaaa ou aaaa:mm ou aaaa:mm:jj), la date de prise de vue
#														est mise-à-jour (avec une convention de codage, voir plus bas), et ce tag supprimé. 
#														LA PHOTO D'ORIGINE EST DONC MISE A JOUR !! 
#LOGICIELS REQUIS : 	imagemagick, jhead, zenity, exiftool
#					(qualification sous Ubuntu 14.04, imagemagick 6.7.7-10, jhead 2.97)
#PRE-REQUIS :		avoir enrichi les fichiers jpeg de titres, commentaires, tags (avec shotwell manager par exemple). 
#					Attention toute mise-à-jour/ré-écriture par un autre logiciel (par ex GNOME image viewer) 
# 							peut ne pas conserver les titres, commentaires, tags...
#							(Police de l'éditeur : courrier 10 pitch 12)
#PARAMETRE 1 : liste des noms des images jpeg sélectionnées dans Nautilus
#-----------------------------------------------------------------------------------------------------------------------
# set -nvx				#	n=>vérif syntaxe v=>affiche cmdes avant éxé x=> affiche résultat de cmdes  																			
# set -x										# Mettre en commentaire pour éxécution standard
# exec >./journal.txt 2>&1		# le compte-rendu d'éxécution est dirigé dans journal.txt - Mettre en commentaire
#-----------------------------------------------------------------------------------------------------------------------
#	
#								 	CREATION du répertoire de destination et du rapport métadonnées 
A=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed -e 's@/home/.*/home/@/home/@')
A=$(dirname "$A")
cd "$A"																				#Ne fonctionne pas si 2 espaces consécutifs dans le chemin (pb de $NAUTILUS_SCRIPT..)
if [ $? != 0 ]; then
	zenity --info --text "Le chemin du répertoire comporte 2 ou plus espaces consécutifs. Le traitement n'est pas pssible dans ces conditions"
	exit
fi
if [ ! -d Photos_légendées ] ; then mkdir Photos_légendées ; fi
#echo 'nom;titre(IPTC);commentaire(EXIF);date de prise de vue(IPTC);tags(IPTC)' >  Photos_légendées/Etat_des_metadonnées.csv
zenity --info --text "Vous pouvez vous placer dans le répertoire Photos_Légendées ci-dessous pour suivre l'avancement"

#									 	Paragraphe destiné à une UTILISATION DANS NAUTILUS

IFS=$'\n'     		# le séparateur interne de champs (IFS) sera limité à LineFeed
									#Utile pour analyser NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
									#Les chemins des fichiers sélectionnés dans Nautilus sont listés ligne à ligne
#NAUTILUS_SCRIPT_SELECTED_FILE_PATHS=$1							# pour exec dans un terminal
for Photo in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do

function ControlSuffixe {
if [[ $(expr match "$Photo" '.*\(...\)') = 'jpg'  || $(expr match "$Photo" '.*\(...\)') = 'JPG' \
			|| $(expr match "$Photo" '.*\(....\)') = 'jpeg'  || $(expr match "$Photo" '.*\(....\)') = 'JPEG' ]]; then
			ERREUR=0
else
			ERREUR=1
fi
}
function ControlOrientation {
EXIForientations=$(exiftool -a -n -orientation $Photo)							
if [[ $EXIForientations = 'Undefined' || $EXIForientations = '' ]]; then 
			exiftool -Orientation=1 -n -overwrite_original $Photo
			EXIForientations=$(exiftool -a -n -orientation $Photo)
elif [ ${EXIForientations:70:1} = '' ]; then cmd-nulle='0'							# à remplacer par la commande nulle
elif [ ! ${EXIForientations:34:1} = ${EXIForientations:70:1} ]; then		#L'orientation est donnée par 2 valeurs,
			ERREUR=2																													# qu'il vaut mieux avoir identiques
fi
}

ControlSuffixe
ControlOrientation
if [ $ERREUR = 0 ]; then																						#if n° 1

#										TRAITEMENT DES DATES EVENTUELLENT PRESENTES DANS LES TAGS
#				(utile pour initialiser un DateTimeOriginal dans d'anciennes photos=> avantage pour générer légende, gérer photothèque...)
Tags=$(identify -format "%[IPTC:2:25]" $Photo)									#keywords (tags, séparés par des ;)
#                    La date communiquée via un tag dans une photo ancienne a le format (AAAA ou AAAA:MM ou AAAA:MM:JJ) :
		DateNouvelle=$(expr match "$Tags" '.*\(\([0-9]\{4\}\)\(:[0-3][0-9]\)\{,2\}\);.*')
		if [ -z "$DateNouvelle" ]; then
			DateNouvelle=$(expr match "$Tags" '.*\(\([0-9]\{4\}\)\(:[0-3][0-9]\)\{,2\}\)$')
		fi
		if [ "$DateNouvelle" != '' ] ; then 
        Datemotcle=$DateNouvelle				
				DateNouvelle=$(echo $DateNouvelle | sed -e 's/^\(.\{4\}\)$/\1:01:01 01:01:01/')			#siAAAA on génère AAAA:01:01 01:01:01 (convention perso)
				DateNouvelle=$(echo $DateNouvelle | sed -e 's/^\(.\{7\}\)$/\1:02 02:02:02/')  			#siAAAA:MM on génère AAAA:MM:02 02:02:02 (convention perso)
				DateNouvelle=$(echo $DateNouvelle | sed -e 's/^\(.\{10\}\)$/\1 03:03:03/') 					#siAAAA:MM:JJ on génère AAAA:MM:JJ 03:03:03 (convention perso)
#				cp $Photo "original_$(basename $Photo)"
# 			la date est retirée des tags (exif:keywords et xmp-dc:subject) et sa version standardisée attribuée à DateTimeOriginal :
				exiftool -DateTimeOriginal=$DateNouvelle -Subject-=$Datemotcle -Keywords-=$Datemotcle -overwrite_original $Photo
				Tags=$(identify -format "%[IPTC:2:25]" $Photo)
		fi

#										EXTRACTION des métadonnées de l'image jpeg 
#																																		date de prise de vue
#																																		(formats : aaaa:mm:jj hh:mm:ss ou aaaa-mm-jjThh:mm:ss)
Datedeprisedevue=$(identify -format "%[EXIF:DateTimeOriginal]" $Photo)				
Datedeprisedevue=$(echo $Datedeprisedevue | sed -e 's/[ T]03:03:03//') 				#utile pour dates anciennes
Datedeprisedevue=$(echo $Datedeprisedevue | sed -e 's/[-:]02[ T]02:02:02//')
Datedeprisedevue=$(echo $Datedeprisedevue | sed -e 's/[-:]01[-:]01[ T]01:01:01//')
																																							#et passage au format jj-mm-aaaa
Datedeprisedevue=$(echo $Datedeprisedevue | sed -e 's/^\([0-9]\{4\}\)[-:]\([0-9]\{2\}\)$/\2\-\1/')
Datedeprisedevue=$(echo $Datedeprisedevue | sed -e 's/\([0-9]\{4\}\)[-:]\([0-9]\{2\}\)[-:]\([0-9]\{2\}\)/\3\-\2\-\1/')

ORIENT=${EXIForientations:34:1} 									
if [[ $ORIENT = 1 || $ORIENT = 3 || $ORIENT = 2 || $ORIENT = 4 ]] ; then	#orientation TopLeft ou BottomRight ou miroir
		Hauteur=$(identify -format %H $Photo)												
		Largeur=$(identify -format %W $Photo)												
fi
if [[ $ORIENT = 6 || $ORIENT = 8 || $ORIENT = 5 || $ORIENT = 7 ]] ; then	#orientation RightTop ou LeftBottom ou miroir
		Hauteur=$(identify -format %W $Photo)												
		Largeur=$(identify -format %H $Photo)	
fi
Titre=$(identify -format "%[IPTC:2:105]" $Photo)								#titre (répété en 2:120 (légende))
identify -format "%[EXIF:UserComment]" $Photo > w1usercomment		#extraction du commentaire
Lcomment=$(expr $(/bin/ls -l w1usercomment | awk '{print $5}'))	#extraction de la longueur du fichier commentaire 
																													     	# au sein de la réponse à ls
ExComment=0										#Indicateurs d'existence
ExTitre=0
ExTags=0
ExDate=0
ExLigne=0

if [ "$Lcomment" -gt 1 ]; then ExComment=1 ; fi
if [ "$Titre" != '' ] ; then ExTitre=1 ; fi
if [ "$Tags" != '' ] ; then ExTags=1 ; fi
if [ "$Datedeprisedevue" != '' ] ; then ExDate=1 ; fi

#echo "$(basename $Photo);$ExTitre;$ExComment;$ExDate;$ExTags" >> Photos_légendées/Etat_des_metadonnées.csv

if [ "$ExComment" = 1 ]  ||  [ "$ExTitre" = 1 ]  ||  [ "$ExTags" = 1 ]  ||  [ "$ExDate" = 1 ] ; then 		 		#if n° 2

#										CONVERSION DE EXIF:UserComment 
# 										Cette étiquette exif est codée unicode uft-8 (2 octets par carcatère), dont l' extraction par
# 										identify (commande imagemagick) représente chaque  caractères par un espace 
#										(1er octet uft-8) suivi d'un nombre décimal (2eme octet uft-8) suivi d'une virgule ! 
#										Conversion un peu laborieuse. UNE SOLUTION PLUS ELEGANTE SERAIT BIENVENUE !!

if [ "$ExComment" = 1 ] ; then
  IFS=$' \t\n'															#Rétablissement de IFS - controle de valeur par : echo $( set | grep ^IFS= )	
  sed --silent -e 's/,//g ; w w2usercomment' w1usercomment	;									#suppression des virgules      
  sed --silent -e 's/^.\{16\}// ; w w3usercomment' w2usercomment;	#suppression des 8 caractères d'en-tete indiquant le mode de codage unicode
  printf "%x" $(cat w3usercomment)  > w4usercomment;							#conversion de décimal à hexadécimal   
  sed  --silent -e 's/../\\x&/g ; w w5usercomment'  w4usercomment;  #insertion de \x tous les 2 caractères pour signifier l'hexadécimal 
  Commentaire=$(printf  $(cat w5usercomment));									  	#conversion de héxadécimal à Latin1
fi

#										Suppression des tags intermédiaires 
#									 (si hiérarchie des tags, par ex Lieu, Famille, Amis, Evènements...) 

if [ "$ExTags" = 1 ] ; then
		# Les 6 commandes suivantes sont à supprimer si l'arborescence des tags est simplifiée		
		Tags=$(echo $Tags';') 															       	  #la liste des tags est fournie sans séparateur de fin (;)												
		Tags=$(echo $Tags | sed -e 's/Lieu *\;//') 										#$(echo ${Tags/Lieu *\;/}) 
		Tags=$(echo $Tags | sed -e 's/Amis *\;//') 										#$(echo ${Tags/Amis *\;/}) 
		Tags=$(echo $Tags | sed -e 's/Famille *\;//') 								#$(echo ${Tags/Famille *\;/}) 
		Tags=$(echo $Tags | sed -e 's/Evènements *\;//') 							#$(echo ${Tags/Evènements *\;/}) 
		Tags=$(echo $Tags | sed -e 's/;$//')													#suppression de ; en fin

		Tags=$(echo $Tags | sed -e 's/([0-9][0-9]*-[0-9][0-9]-[0-9][0-9][0-9][0-9])//g') #suppression des dates de naissance éventuelles
		if [ ! $(expr match "$Tags" '\(^.\)') = '&' ]; then				##les noms sont précédés de & (convention personnelle)
		Tags=$(echo $Tags | sed -e 's/;&/ \/ /'); fi							# si le 1er car n'est pas &, alors le 1er ;& est remplacé par /
		Tags=$(echo $Tags | sed -e 's/;&/ ; /g')									# tous les autres ;& sont remplacés par ;
		Tags=$(echo $Tags | sed -e 's/^&//')											# suppression de & s'il est en tête
		if [ ! $(expr match "$Tags" '\(^.\)') = 'à' ]; then				##les lieux sont précédés de à (convention personnelle)
		Tags=$(echo $Tags | sed -e 's/;à/ \/ /'); fi									
		Tags=$(echo $Tags | sed -e 's/;à/ ; /g')									
		Tags=$(echo $Tags | sed -e 's/^à//')											
		if [ ! $(expr match "$Tags" '\(^.\)') = '!' ]; then				##les évènements sont précédés de ! (convention personnelle)
		Tags=$(echo $Tags | sed -e 's/;!/ \/ /'); fi									
		Tags=$(echo $Tags | sed -e 's/;!/ ; /g')									
		Tags=$(echo $Tags | sed -e 's/^!//')										
fi


#										Création de l'image TAGS + DATE pour le bas de page 

function EcrTags {
LargeurTags=`expr $Largeur - $LargeurDate `			#largeur de l'image des tags = largeur de la photo - largeur de la date 
convert   -fill black -density 150 -font Ubuntu-Italic -pointsize $PointSize -gravity West \
          -size "$LargeurTags"x   caption:"$Tags" tags.jpg
}
#-------------------------------------------------------------------------------
function EcrDate {
if [ "$ExTags" = 0 ] ; then
LargeurDate=$Largeur
else
LargeurDate=$(expr $PointSize \* 20)       			#pour une taille 10, la date prendra 200 pixels (en densité 150dpi)
fi
convert   -fill black -density 150 -font Ubuntu-Italic -pointsize $PointSize -gravity east \
          -size "$LargeurDate"x   caption:"$Datedeprisedevue" Datedeprisedevue.jpg
}
#-------------------------------------------------------------------------------
if [ "$ExTags" = 1 ] || [ "$ExDate" = 1 ] ; then
		PointSize=$(expr $Hauteur / 160) 				    #pour une hauteur d'image de 1920 pixels, cette ligne sera en taille 12
		if [ "$PointSize" -lt 6 ] ; then PointSize=6 ; fi
		if  [ "$ExTags" = 0 ] ; then
				EcrDate
				mv Datedeprisedevue.jpg  legende-bas.jpg
		elif [ "$ExDate" = 0 ] ; then
				LargeurDate=0 
				EcrTags
				mv tags.jpg legende-bas.jpg
		else 
					EcrDate
					EcrTags
			  	montage -geometry +0+0     -tile 2x  tags.jpg Datedeprisedevue.jpg legende-bas.jpg
		fi
fi
	
#										Création des lignes <TITRE -- COMMENTAIRE> 

function creationlignes {
convert   -fill black -density 150 -font Ubuntu-Italic -pointsize $PointSize  -gravity center\
          -size "$Largeur"x   caption:"$Legende" legende-haut.jpg
}
#------------------------------------------------------------------------------- 
PointSize=$(expr $Hauteur / 160) 		#Pour une hauteur d'image de 1920 pixels, cette ligne sera en taille 12 (PointSize)
if [ "$PointSize" -lt 6 ] ; then PointSize=6 ; fi
if [ "$ExTitre" = 0 ] && [ "$ExComment" = 1 ]; then Legende="$Commentaire" ; creationlignes ; fi
if [ "$ExTitre" = 1 ] && [ "$ExComment" = 0 ]; then Legende="$Titre" ; creationlignes ; fi
if [ "$ExTitre" = 1 ] && [ "$ExComment" = 1 ]; then Legende="$Titre  --  $Commentaire" ; creationlignes ; fi

#										 ASSEMBLAGE DES LIGNES AVEC LA PHOTO 

IFS=$'\n'   										#Retour à la valeur de IFS nécessaire pour traiter  NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

if [ -f legende-bas.jpg ]  && [ -f legende-haut.jpg ]; then
		montage -geometry +0+0     -tile x2  legende-haut.jpg  legende-bas.jpg      legende.jpg 
fi
if [ ! -f legende-bas.jpg ] ; then mv legende-haut.jpg legende.jpg ; fi
if [ ! -f legende-haut.jpg ] ; then mv legende-bas.jpg legende.jpg ; fi
if [[ $ORIENT = 1 ]] ; then 
		montage -geometry +0+0 -tile x2 $Photo legende.jpg Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 2 ]] ; then
		mogrify  -flop legende.jpg 
		montage -geometry +0+0 -tile x2 $Photo legende.jpg Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 3 ]] ; then 
		mogrify -rotate "180" legende.jpg
		montage -geometry +0+0 -tile x2 legende.jpg $Photo  Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 4 ]] ; then 
		mogrify -flop -rotate "180" legende.jpg
		montage -geometry +0+0 -tile x2 legende.jpg $Photo  Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 6 ]] ; then 
		mogrify -rotate "270" legende.jpg
		montage -geometry +0+0 -tile 2x $Photo legende.jpg  Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 7 ]] ; then 
		mogrify -flip -rotate "270" legende.jpg
		montage -geometry +0+0 -tile 2x legende.jpg $Photo Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 8 ]] ; then 
		mogrify -rotate "90" legende.jpg
		montage -geometry +0+0 -tile 2x legende.jpg $Photo  Photos_légendées/$(basename $Photo)
fi
if [[ $ORIENT = 5 ]] ; then 
		mogrify -flip -rotate "90" legende.jpg
		montage -geometry +0+0 -tile 2x $Photo legende.jpg  Photos_légendées/$(basename $Photo)
fi

rm 'w'[1-5]usercomment  Datedeprisedevue.jpg legende-haut.jpg legende-bas.jpg legende.jpg  tags.jpg 
else																																																		  	#if n° 2
cp $Photo Photos_légendées
fi																																																					#if n° 2
else																																																	    	#if n° 1			
	if [ $ERREUR = 1 ]; then		
		zenity --info  --title 'LégenderPhotos'   --text "Fichier non traité $Photo (seuls les .jpg .JPG .jpeg ou .JPEG sont admis)"
	fi
	if [ $ERREUR = 2 ]; then
		zenity --info --text "Les 2 valeurs pour l'orientation ne sont pas identiques pour $Photo"\
							"\n\nCommande pour contrôler les valeurs : exiftool -a -orientation photo.jpg"
	fi
fi																																																			   	#if n° 1							
done

cd Photos_légendées
jhead -te "../&i" * 									# copie des données exif et IPTC en masse
cd ..

zenity --info --title 'LégenderPhotos' --text "Les copies légendées des photos sont dans le répertoire Photos_légendées, "\
"sous le même nom et avec les mêmes metadata que les originaux."

exit 0


  

- Scripts n°5 et 6 : il peuvent assembler à l'horizontale ou à la verticale un nombre quelconque d'images (pratique pour un recto-verso de carte postale)

 #!/bin/bash
# AUTEUR : 						alberto33 (forum.ubuntu-fr.org)
# NOM :								5.AssemblerHorizontal
# VERSION :						31/12/2016 : version 0.1 pour scripts Nautilus
# DESCRIPTION : ASSEMBLAGE HORIZONTAL DE 2 OU PLUS IMAGES
# 							L'image produite a pour nom celui de la première photo de la liste suffixé par _multi 
#								L'image produite a pour hauteur celle de la première de la liste 
#								!!!!   Les autres images de la liste sont retaillées, si nécessaire, à la hauteur de la première.
#                              L'orientation EXIF est recalée sur top-left ; une bordure blanche est ajoutée
# LOGICIELS REQUIS : imagemagick
#										(qualification sous Ubuntu 14.04, imagemagick 6.7.7-10)
# PRE-REQUIS :    format jpeg
# PARAMETRE 1 : liste des noms des images jpeg sélectionnées dans Nautilus
#-----------------------------------------------------------------------------------------------------------------------
#
# Paragraphe destiné à une utilisation dans le navigateur de fichiers Nautilus
# Les chemins des fichiers sélectionnés dans Nautilus sont ligne à ligne
IFS=$'\n'     																											# le séparateur interne de champs (IFS) sera limité à LineFeed
																																					#Utile pour analyser NAUTILUS_SCRIPT_SELECTED_FILE_PATHS


function Retailler {
if [ ! $HauteurRef = $Hauteur ] ; then
  mogrify -resize x"$HauteurRef" $Photo_trav
fi
}

I=1
for Photo in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ;
do
if [[ $(expr match "$Photo" '.*\(...\)') = 'jpg'  || $(expr match "$Photo" '.*\(...\)') = 'JPG' \
			|| $(expr match "$Photo" '.*\(....\)') = 'jpeg'  || $(expr match "$Photo" '.*\(....\)') = 'JPEG' ]]; then	
Photo_trav=${Photo%'.'*}"_trav.jpg"
convert $Photo -bordercolor white -border 5 $Photo_trav   #bordure blanche de 5 pixels
if [ $I = 1 ] ; then
   LxH=$(identify -format %G $Photo)															#G=largeur x hauteur (car l'orientation est tp-left) 
   HauteurRef=${LxH#[0-9]*x}                                          #suppression du début de chaîne correspondant à [0-9]*x	: HauteurRef=H
   Photo_multi=${Photo%'.'*}"_multi.jpg"  
   mv $Photo_trav $Photo_multi
   I=2
else
   LxH=$(identify -format %G $Photo_trav) 
   Hauteur=${LxH#[0-9]*x}
   Retailler
   montage -geometry +0+0 -tile 2x -compress jpeg -quality 50 $Photo_multi $Photo_trav $Photo_multi
   rm $Photo_trav 
	 exiftool -Orientation=1 -n -overwrite_original $Photo_multi				 #recale l'orientation sur top-left
fi
else																																																																																		    	#if n° 1			
zenity --info  --title 'AssemblerHorizontal'   --text "Arrêt du traitement car un fichier n'est pas suffixé en .jpg .JPG .jpeg ou .JPEG"
exit 1
fi					
done
exit 0
# ==============================================================================
# ATTENTION : si l'image résultante a une dimension supérieure à 32768 pixels, elle n'est pas lisible par 
# Image Viewer voire Adobe Photoshop. Une réduction est possible par la commande
# convert -resize 32760x img1.jpg img2.jpg (si c'est la largeur qui pose problème)
  
 #!/bin/bash
# AUTEUR : 				alberto33 (forum.ubuntu-fr.org)
# NOM :						6.AssemblerVertical
# VERSION :				31/12/2016 : version 0.1 pour scripts Nautilus
# DESCRIPTION : 	ASSEMBLAGE VERTICAL DE 2 OU PLUS IMAGES
# 								L'image produite a pour nom celui de la première photo de la liste suffixé par _multi 
#									L'image produite a pour largeur celle de la première de la liste 
#									!!!!   Les autres images de la liste sont retaillées, si nécessaire, à la largeur de la première.
#                 L'orientation EXIF est recalée sur top-left ; une bordure blanche est ajoutée
# LOGICIELS REQUIS : imagemagick
#										(qualification sous Ubuntu 14.04, imagemagick 6.7.7-10)
# PRE-REQUIS :    format jpeg
# PARAMETRE 1 : liste des noms des images jpeg sélectionnées dans Nautilus
#-----------------------------------------------------------------------------------------------------------------------
#
######### Paragraphe destiné à une utilisation dans le navigateur de fichiers Nautilus 
# Les chemins des fichiers sélectionnés dans Nautilus sont ligne à ligne

IFS=$'\n'   																							# le séparateur interne de champs (IFS) sera limité à LineFeed
																													#Utile pour analyser NAUTILUS_SCRIPT_SELECTED_FILE_PATHS


function Retailler {
if [ ! $LargeurRef = $Largeur ] ; then
  mogrify -resize "$LargeurRef"x $Photo_trav
fi
}

I=1
for Photo in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ;
do
if [[ $(expr match "$Photo" '.*\(...\)') = 'jpg'  || $(expr match "$Photo" '.*\(...\)') = 'JPG' \
			|| $(expr match "$Photo" '.*\(....\)') = 'jpeg'  || $(expr match "$Photo" '.*\(....\)') = 'JPEG' ]]; then	
Photo_trav=${Photo%'.'*}"_trav.jpg"  
convert $Photo -bordercolor white -border 5 $Photo_trav   #bordure blanche de 5 pixels
if [ $I = 1 ] ; then
   LxH=$(identify -format %G $Photo_trav)															#G=largeur x hauteur (car l'orientation est tp-left) 
   LargeurRef=${LxH%x[0-9]*}                                          #suppression de la fin de chaîne correspondant à x[0-9]*	: LargeurRef=L
   Photo_multi=${Photo%'.'*}"_multi.jpg"  
   mv $Photo_trav $Photo_multi
   I=2
else
   LxH=$(identify -format %G $Photo_trav) 
   Largeur=${LxH%x[0-9]*}
   Retailler
   montage -geometry +0+0 -tile x2 -compress jpeg -quality 50 $Photo_multi $Photo_trav $Photo_multi
   rm $Photo_trav 
	 exiftool -Orientation=1 -n -overwrite_original $Photo_multi				 #recale l'orientation sur top-left 
fi
else																																																																																		    	#if n° 1			
zenity --info  --title 'AssemblerVertical'   --text "Arrêt du traitement car un fichier n'est pas suffixé en .jpg .JPG .jpeg ou .JPEG"
exit 1
fi					
done
exit 0
# ==============================================================================
# ATTENTION : si l'image résultante a une dimension supérieure à 32768 pixels, elle n'est pas lisible par 
# Image Viewer voire Adobe Photoshop. Une réduction est possible par la commande
# convert -resize x32760 img1.jpg img2.jpg (si c'est la hauteur qui pose problème)
  

A cela s'ajoute une documentation (2 pages) qui détaille les protocoles de base pour gérer les photos actuelles issue d'un appareil numérique ou les photos issues d'un scan, ainsi que la mise en place de ces outils.
Script pour lancer l'ouverture du document :

 #!/bin/bash
#AUTEUR : 						alberto33 (forum.ubuntu-fr.org)
#NOM :								7.Aide
#VERSION :		 				31/12/2016 : version 0.1 pour scripts Nautilus
#DESCRIPTION :				Lancement de la visualisation du fichier d'aide aux utilitaires photo
#LOGICIELS REQUIS :		evince (standard sous Ubuntu)
#PRE-REQUIS :		
#								(Police de l'éditeur de texte : courrier 10 pitch 12)
#PARAMETRE  : 

cd ~/.local/share/nautilus/scripts/Photo
evince 7.Aide_Photo.pdf

exit  

Et le document proprement dit est disponible ici : https://mon-partage.fr/f/OKlNOf3d/  au moins jusqu'à fin 2017 (je ne sais pas le joindre autrement dans ce forum)

Enfin, il y a un lanceur shottwell qui permet de compartimenter le stockage des photos (par exemple une base pour les photos contemporaines, une base pour les photos anciennes). Cette précaution est peut-être superflue...

 #!/bin/bash
#AUTEUR : 						alberto33 (forum.ubuntu-fr.org)
#NOM :								LShotwell
#VERSION :		 				31/12/2016 : version 0.1 
#DESCRIPTION :				script de lancement du gestionnaire de phothèque Shotwell
#											SELECTION DE LA LIBRAIRIE 0 UTILISER
#LOGICIELS REQUIS :		
#PRE-REQUIS :		
#								(Police de l'éditeur de texte : courrier 10 pitch 12)
#PARAMETRE  : 
#set -x										#Mettre en commentaire pour éxécution standard
#exec >./journal.txt 2>&1	#le compte-rendu d'éxécution est dirigé dans journal.txt - Mettre en commentaire
#
LIBRAIRIE=''

function ChoixLibrairie {
LIBRAIRIE=$(zenity --list --text="<b><big><tt><span color=\"blue\"><span font-family=\"webdings\">Choix de la librairie pour Shotwell
</span></span></tt></big></b>" \
--window-icon=/usr/share/icons/hicolor/scalable/apps/shotwell.svg \
--title="Lancement de Shotwell" \
--column="Librairies disponibles" \
"Photos actuelles" \
"Photos anciennes")
}

while [ "$LIBRAIRIE" = '' ]
do
ChoixLibrairie
if [ $? != '0' ]; then exit ; fi
if [ "$LIBRAIRIE" = 'Photos actuelles' ]; then
		shotwell -d ~/.local/share/shotwell1
		exit
fi
if [ "$LIBRAIRIE" = 'Photos anciennes' ]; then
		shotwell -d ~/.local/share/shotwell2
		exit
fi
done
exit

Ces scripts utilisent quelques outils tels que exiftool, imagemagick, jhead, et zenity disponibles sur le centre de logiciels Ubuntu.

Je reste disponible pour aider quiconque à s'en servir , pour écouter et discuter des critiques fonctionnelles ou techniques. Enfin j'espère ne pas avoir réinventé l'eau chaude, mais j'avoue que j'aurais largement préféré trouver l'outillage tout prêt pour mon utilisation qui n'a rien d'exotique.

Et en ce début 2017, j'espère ainsi apporter un petit cadeau à quelques autres amateurs !

Michel

Hors ligne

#2 Le 03/01/2017, à 21:59

nam1962

Re : Petit amateur de photos, mais exigeant, je ne veux plus galérer.

Wahhh ! Bravo !


Almanet doLys de l'open source : mon tuto pour optimiser / finaliser une install
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing Et vous ?
57 convertis  IRL (n'ont pas eu le choix...).
Un jeune site que j'aime bien, le top du T-shirt homme ...bio et éthique en plus : https://goudronblanc.com

Hors ligne

#3 Le 09/01/2017, à 11:27

SESTAY

Re : Petit amateur de photos, mais exigeant, je ne veux plus galérer.

bonjour,
juste une petite astuce (remarque) au sujet du fichier d'aide.
Lors de l'exportation pdf avec libre office, dans la boite de dialogue d'exportation, [Général] cocher la case [incorporer le fichier OpenDocument].
Ainsi le document pdf sera éditable normalement avec writer un peu plus lourd (430 ko au lieu de 385) .


une modeste participation à ffDiaporama Changement d'adresse du site http://tvb2016.pagesperso-orange.fr/ff/co/siteWeb.html.
Actuellement le projet ffDiaporama est en stand by, si des amateurs veulent s'y coller, ils seront les bienvenues.

Hors ligne