Export de vos données de KPhotoAlbum vers 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
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
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";
# 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";







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
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() ?
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…
Rien de tout çà
, ce n’était pas le bon code, j’ai corrigé l’article.
@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.
@b_adele: ah ben là oui, je comprends
C’est vrai que le perl ressemble au php. Ou plutôkt le contraire
Bonjour,
Sinon, il y a Sagittarius :
http://ubunteros.tuxfamily.org/spip.php?article185
@+
@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.
Merci b_adele pour ce script qui devrait m’éviter bien du boulot
Fspot gère mes TAG directement dans flickr…c’est pratique.
Bonjour,
), 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 :
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
BEGIN failed–compilation aborted at ./kphotoalbum2iptc.pl line 14.
Je suis sous Ubuntu Koala.
Quelqu’un aurait une idée pour moi?
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…
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(%{$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 »;
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
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/Kphotoalbum
reference 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
=> 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…
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(%{$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 »;
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
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.
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?
param 2 :*\.jpeg
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