KPhotoAlbum vers le format IPTC
Depuis environ 5 ans j’utilise KPhotoAlbum. Afin d’éviter de devoir retagger mes photos pour les partager sur mon compte flickr, j’ai modifié un script de Pierre Doucet trouvé sur le site linuxfr
A propos
- KPhotoAlbum (se nommait auparavant kimdaba), ce logiciel fonctionne sous KDE et permet d’associer pour chaque photo des mots clefs comme par exemple (Lieu, Personne, Evènement). Vous pouvez ensuite retrouver très rapidement des photos en fonction des mots clefs désirés. Ce logiciel me permet de retrouver en moins de 5 secondes des photos sur une base de + de 20.000 photos.
- IPTC Standard permettant de véhiculer des informations directement dans la photo. Ceci permet donc visualiser les informations depuis un logiciel compatible IPTC.
Installation
Avant d’utiliser le script il faut avant tout installer les librairies perl.
mkdir -p ~/local/bin perl -MCPAN -e shell
Répondre oui à la question posée, ensuite exécuter les lignes suivantes
cpan> o conf makepl_arg PREFIX=~/local o conf commit install Image::Kimdaba install Image::IPTCInfo
Le script
Copier le script ci dessous vers le fichier kphotoalbum2iptc.pl
Par soucis de sécurité le script s’exécute en mode simulation, pour l’activer, modifier la variable onlyparse à 0
Exemple d’utilisation
./kphotoalbum2iptc.pl /path/album "^sous repertoire.*.jpg|.jpeg"
kphotoalbum2iptc.pl
#!/usr/bin/perl -w # kphotoalbum2iptc.pl # Param 1 : Chemin du catalogue KPhotoAlbum # Param 2 : Filtre (ex: "^dvd 3.*\\.jpg|\\.jpeg" ) # A MODIFIER use lib qw(/home/b_adele/local/share/perl5/site_perl/5.10.0/); $verbose=0; $onlyparse=0; # Chargement des librairies use Image::Kimdaba; use Image::IPTCInfo; my @ListOfPictures; $folder = $ARGV[0]; $filter = $ARGV[1]; # Parse le catalogue KPhotoAlbum print "Chemin de base: $folder\\n"; parseDB( "$folder" ); # Compte le nombre de photos my $nb1= scalar keys %imageattributes; my $nb2= scalar keys %imageoptions; print "$nb1 photos dont $nb2 avec des tags:\\n"; # Ajout des infos dans la photo (IPTC) $count=0; foreach $kphoto (keys(%imageoptions)) { if ($kphoto =~ m/$filter/i ) { $count++; print "Photo en cours : $folder/$kphoto (N° $count)\\n"; my $iptc = create Image::IPTCInfo("$folder/$kphoto"); foreach $kkey (keys(%{$imageoptions{$kphoto}})) { if ($verbose) { print "--> $kkey\\n"; } foreach $values (@{${$imageoptions{$kphoto}}{$kkey}}) { if ($verbose) { print "-----> $values\\n"; } $iptc->AddKeyword("$values"); } } if (!$onlyparse) { $iptc->Save();} } } print "$count photos traitées";
20 réponses à Export de vos données de KPhotoAlbum vers IPTC
-
Equinoxefr dit :
Salut,
Amusant de voir un vieux script, fait il y a quelques années, retrouver une utilité
Depuis quelques temps, je suis passé à F-spot sous Gnome, toujours avec l’aide de quelques scripts perl…
Pierre
-
moSaN dit :
Juste pour être certain de bien comprendre le script. Je suis loin de tout comprendre dès qu’il s’agit de perl.
Pour désactiver le mode simulation il faut changer la variable «onlyparse» mais je ne vois aucune référence à cette variable dans le bout de code.
Ne serait-ce pas plutôt la variable «verbose».Ou alors la variable «onlyparse» est une variable associée à IPTC qui bloque la fonction d’écriture Save() ?
-
davitof dit :
Euh, je ne connais pas perl, alors je dis surement une bêtise, mais tu es sûr, pour la variable onlyparse? Je n’en vois pas trace dans le script…
-
davitof dit :
@moSaN: je ne crois pas que ce soit verbose. Aussi bien par le sens du mot « verbose » en anglais que par ce que je crois comprendre du script, je pense que la variable verbose sert uniquement à afficher plus d’informations en cours d’exécution.
-
davitof dit :
@b_adele: ah ben là oui, je comprends C’est vrai que le perl ressemble au php. Ou plutôkt le contraire
-
Christophe dit :
-
b_adele dit :
@Christophe, je ne connaissais pas Sagittarius, néanmoins il ne semble pas pouvoir exporter les tags déjà saisies dans KPhotoAlbum vers le format IPTC, le but du script est justement d’éviter de ressaisir les informations déjà saisies précédemment sur KPhotoAlbum.
-
moSaN dit :
Merci b_adele pour ce script qui devrait m’éviter bien du boulot
-
Teebo dit :
Bonjour,
Depuis hier soir je me demande bien comment changer de logiciel sans perdre mes infos rentrées dans Kphotoalbum, et là ce matin, miracle, je tombe sur ce post (désolé de jouer les archéologues ), j’essaye donc comme indiqué, il semble que l’installation se passe bien (Warning usually Harmless de YAML) mais quand j’essaye de lancer le script :
BEGIN failed–compilation aborted at ./kphotoalbum2iptc.pl line 14.Je suis sous Ubuntu Koala.
Quelqu’un aurait une idée pour moi? -
Teebo dit :
EDIT: On oublie tout, appelez moi stupide, j’avais pas changé le chemin (celui directement sous le gros « A MODIFIER », oui oui, celui là même…
-
Chaland dit :
Je voudrais bien pouvoir transférer les infos de 10000photos de kphotoalbum sur Digikam.
J’ai essayé le script mais je ni arrive pas . Voici ce que j’ai fait :
Image ::kimdaba et Image::IPTCInfo sont bien installés.
[root@sonypierre home]# ./kphotoalbum2iptc.pl /pierre/kphotoalbum.
Le script se trouve dans home . Kphotoalbum est situé dans home/pierre.
Voici le script:
#! /usr/bin/perl -w
# kphotoalbum2iptc.pl# Param 1 : /pierre
# Param 2 : « \\.jpeg »# A MODIFIER
use lib qw(/pierre/local/share/perl5/site_perl/5.10.0/);
$verbose=0;
$onlyparse=0;# Chargement des librairies
use Image::Kimdaba;
use Image::IPTCInfo;my @ListOfPictures;
$folder = $ARGV[0];
$filter = $ARGV[1];# Parse le catalogue KPhotoAlbum
print « Chemin de base: $folder\\n »;
parseDB( « $folder » );# Compte le nombre de photos
my $nb1= scalar keys %imageattributes;
my $nb2= scalar keys %imageoptions;
print « $nb1 photos dont $nb2 avec des tags:\\n »;# Ajout des infos dans la photo (IPTC)
$count=0;
foreach $kphoto (keys(%imageoptions))
{
if ($kphoto =~ m/$filter/i ) {
$count++;
print « Photo en cours : $folder/$kphoto (N° $count)\\n »;
my $iptc = create Image::IPTCInfo(« $folder/$kphoto »);
foreach $kkey (keys(%}))
{
if ($verbose) { print « –> $kkey\\n »; }
foreach $values (@}})
{
if ($verbose) { print « —–> $values\\n »; }
$iptc->AddKeyword(« $values »);
}
}if (!$onlyparse) { $iptc->Save();}
}
}print « $count photos traitées »;
Lorsque je le lance Voici le résultat il s’arrête à la ligne 26.
[root@sonypierre home]# ./kphotoalbum2iptc.pl /home/pierre/kphotoalbum
Chemin de base: /home/pierre/kphotoalbum
Can not find KimDaBa’s database at ./kphotoalbum2iptc.pl line 26.Pouvez vous m’aider? Merci
-
Chaland dit :
Désolé j’ai fait une erreur mon album s’appelle Kphotoalbum avec un K majuscule.
Maintenant j’ai l’anomalie suivante:
/home/pierre/Kphotoalbum: /home/pierre/Kphotoalbumreference to invalid character number at line 1040, column 48, byte 46620 at /usr/lib/perl5/vendor_perl/5.10.1/i386-linux-thread-multi/XML/Parser.pm line 187
Avez-vous une idée? Merci -
Keuronde dit :
=> Chaland
A ta place, j’ouvrirai le fichier XML pour voir ce qui se trouve à la ligne 1040, colonne 48. Il y a peut-être un caractère étrange qui te donnera une idée sur ce qui ne va pas… -
Chaland dit :
kphotoalbum2iptc.pl
! /usr/bin/perl -w
# kphotoalbum2iptc.pl# Param 1 : /home/pierre
# Param 2 : <># A MODIFIER
use lib qw(/home/pierre/local/share/perl5/site_perl/5.12.3/);
$verbose=0;
$onlyparse=0;# Chargement des librairies
use Image::Kimdaba;
use Image::IPTCInfo;my @ListOfPictures;
$folder = $ARGV[0];
$filter = $ARGV[1];# Parse le catalogue kphotoalbumavec
print « /home/pierre/kphotoalbum:$folder\\n »;
parseDB( « $folder » );# Compte le nombre de photos
my $nb1= scalar keys %imageattributes;
my $nb2= scalar keys %imageoptions;
print « $nb1 photos dont $nb2 avec des tags:\\n »;# Ajout des infos dans la photo (IPTC)
$count=0;
foreach $kphoto (keys(%imageoptions))
{
if ($kphoto =~ m/$filter/i ) {
$count++;
print « Photo en cours : $folder/$kphoto (N° $count)\\n »;
my $iptc = create Image::IPTCInfo(« $folder/$kphoto »);
foreach $kkey (keys(%}))
{
if ($verbose) { print « –> $kkey\\n »; }
foreach $values (@}})
{
if ($verbose) { print « —–> $values\\n »; }
$iptc->AddKeyword(« $values »);
}
}if (!$onlyparse) { $iptc->Save();}
}
}print « $count photos traitées »;
Ce script depuis mon dernier commentaire a toujours bien fonctionner.
Aujourd’hui je suis passé à perl 5.12.3.
Le script stoppe la ligne 36 avec cette info:
« Use of uninitialized value $filter in regexp compilation at ./kphotoalbum2iptc.pl line 36. »
Il traite toutes les photos mais ne sort rien.
Avez vous une idée du problème?
Merci -
b_adele dit :
Avez vous indiquer les 2 paramètres lors du lancement de votre commande ? Il semblerait que la variable $filter soit vide. Sinon je ne vois pas.
-
Chaland dit :
Je ne comprend pas. En fait j’ai ceci: Param 2 : <>
Est ce correct?
De plus j’ai un problème sur cpan je ne peux installer per5 qu’en root et sur /root/local pourquoi? -
Chaland dit :
Vous aviez raison au lancement j’avais oublié les 2 paramètres.
Maintenant il traite toutes les données et affiche donnée en cours.
Par contre ,il n’édite pas le fichier IPTCI.
Merci de votre aide