Fatigué de mon logiciel de création de galeries photos bbGallery, j'ai décidé en juillet de créer mon propre programme de génération de galerie en Python.
Comme j'ai tout le temps Gimp d'ouvert lorsque je travaille mes photos j'utilise couramment des Python-fu juste pour lancer GThumb, FLPhoto ou autres depuis Gimp, on peut aussi depuis GThumb ouvrir une image dans Gimp donc la boucle est bouclée. J'ai donc choisi de faire un Python-fu pour mon programme de galeries. Ça m'a permis également d'avoir une boite de dialogue à l'oeil, autrement je serai passé par Glade pour faire une interface utilisateur (je l'ai déjà fait). Ensuite un Python-fu est un programme Python comme un autre, c'est à dire que vous avez accès à tous les modules Python existants et vous pouvez aussi lancer n'importe quelle commande système. Pour traiter par lot les images je me suis ainsi retrouvé avec le choix entre Gimp, Python Imaging Library ou ImageMagick. Byzance quoi ! Gimp est réputé lent pour les traitements par lot et ImageMagick sort du cadre Gimp+Python dans lequel je préfère rester. Python Imaging Library a su me convaincre avec son mode ANTIALIAS pour les opérations de réduction des images. Il est assez paradoxal de faire un Python-fu et finalement de ne pas utiliser Gimp mais c'est ce qui a fini par m'arriver :).
Ensuite j'ai voulu faire parler français à mon Python-fu. Visiblement il fallait passer par un encodage UTF-8 pour arriver à sortir les caractères accentués du français dans la boite de dialogue de Gimp. Et pour passer le Python-fu en UTF-8 il faut bidouiller avec une ligne d'entête # -*- coding: utf-8 -*-, pas génial mais je n'ai pas trouvé mieux. Bien, après pourquoi ne pas l'internationaliser ? c'est à dire le distribuer en blilingue français-anglais. Gettext m'a semblé bien trop compliqué pour si peu de choses. J'ai inventé un petit dictionnaire qui utilise le code de langue en suffixe d'index. Il m'a suffit ensuite de récupérer le code de langue depuis la variable d'environnement LANG et le tour était joué. Ça fonctionne pas mal (sur mon Linux en tout cas) je pense donc consolider cette idée en créant la prochaine fois une classe, ce sera plus élégant.
L'étape suivante a constitué à générer les fichiers HTML. J'ai opté pour l'écriture directe du code HTML dans le programme en Python. Pour paramétrer le code HTML, j'y ai inclus des variables en majuscules que je n'avais plus qu'à remplacer par des bouts de code HTML. Facile et le résultat est validé W3C. Les fichiers HTML sont thémables à partir de feuilles de style CSS, celles-ci sont à créer séparément, j'ai bien sûr fait mon propre jeu qui est mis à disposition en téléchargement.
La dernière étape a été de me débrouiller avec la pauvre boite de dialogue des Python-fu. On ne peut pas pas dire qu'elle fasse honneur à la puissance des Python-fu, il n'y a même pas un simple bouton d'aide ! Il est clair que la solution Glade est quand même plus élégante. Pour accroitre les possibilités offertes j'ai laissé la possibilité à l'utilisateur de créer des fichiers texte (encodage UTF-8) pour ajouter ou modifier les paramètres de la boite de dialogue. Ainsi le fichier title.txt écrasera le contenu de la variable Titre, le fichier comment.txt ajoutera des commentaires aux photos, etc. Cette façon de faire s'avère finalement pratique car il suffit de laisser les fichiers textes dans le répertoire des photos pour ne plus avoir besoin de remplir à chaque fois les champs de la boite de dialogue.
Tester PhotoLabo pour Linux, les fichiers d'aide sont en français.