Mots-clé : script-fu

Gimp, scripting et Python-fu : exemple par la transformation d’une image PNG en image transparente

J’ai été plus loin dans l’automatisation de Gimp.

J’ai voulu reprendre mes deux articles qui parlaient de Script-fu : le premier pour débuter ici, et le second qui passe à peine à la vitesse supérieure, qui explique l’assignation des variables ici.

Mais comme je suis un grand fan de Python et que tout a été fait pour pousser Python en avant dans Gimp, j’en ai profité.
Trois heures de travail avant d’y arriver.

Première chose à savoir :

On parle de script Python, mais ce sont des plugins.
Donc, lorsqu’on les installe, il faut les mettre dans le répertoire ~/.gimp/plug-ins/ et non pas ~/.gimp/scripts/.

Deuxième chose :

Ils doivent être exécutables. Donc :

chmod +x ~/.gimp/plug-ins/monscript.py

Troisième chose :

Enfin, allez chercher des exemples ici : http://registry.gimp.org/

Vous les installez et vous les lancez à partir de là vous avez tout ce qu’il vous faut.
Si vous avez lu ces trois informations avant de vous lancez dans l’aventure je vous aurais probablement fait gagner au moins une demi-journée.

Enfin, pour que la ligne de commande fonctionne sur les dernières versions de Gimp (2.6.8) à l’heure de l’écriture de cet article, il y a plein d’articles obsolètes sur le net. Je vais encore vous faire gagner des heures de recherche :

Voici un exemple complet d’un lancement en ligne de commande qui fonctionne :

gimp -i --batch '(python-fu-batch-to-transparent-indexed RUN-NONINTERACTIVE "/home/olivier/Bureau/france.php.png" "/home/olivier/Bureau/france.2.php.png")' -b '(gimp-quit 0)'

Et voici mon plugin tout simple que j’ai codé en 15 minutes, mais avant d’arriver là j’ai cherché pendant six heures…

Cliquez ici pour le télécharger.

Ce plugin transforme une image PNG en la même image, mais en transparente et en couleurs indexée.
Il n’est pas 100% terminé, car la couleur de transparence est codée en dur, mais il fonctionne très bien pour peu que votre couleur soit le blanc 🙂

Pour ce qui est de la méthode, je me suis très fortement inspiré de ce site.

Si je vous ai aidé n’hésitez pas à me laisser un message !

The Gimp : mémo de la syntaxe Script-Fu

Script-Fu est le langage de script pour automatiser The Gimp. Voici un mémo pour ceux qui veulent faire rapidement du Script-Fu.

Résumé Script-Fu

  • Style d’écriture : notation Polonaise inversée : (+ 1 2) donnera 3
  • Tout est entre parenthèses. Même une fonction qui n’a pas de paramètres.
    Exemple de fonction qu’on appelle sans passer de paramètres : (gimp-image-list)
  • Tout s’écrit sous la forme :
    (f x1 . . . xn)
    Et f est une fonction, ou un mot-clé.
    Exemples de mots-clé : if, and, or, let, define, car
  • Le code (define <symbole> <expression>)
    sert à définir un <symbole> qui devient une variable globale.
    Un <symbole> peut être une fonction ;
  • Définition d’une fonction :
    (define (myfunc param1 . . . paramn) (corps de la fonction))
    Sachant que param1 . . . paramn sont les paramètres à passer à la fonction ;
  • Les constantes booléennes vrai / faux sont notées #t (=true) et #f (=false).
    Exemples :
    > (integer? (sqrt 2))
    #f
    > (integer? 4)
    #t
  • Exemple : (gimp-image-list)

NB : ce mémo est destiné à faire rapidement du Script-Fu. Rien de plus !

The Gimp : exemple simple Script-Fu

Detail pas à pas de la création d’un listing :

  • Decription de la fonction gimp-image-list :
    Cette fonction renvoie une liste :

    • premier élément = nombre d’images
    • ce qui suit = pointeurs sur les images
  • Code classique d’appel de la fonction :
    (gimp-image-list)
  • Assigner à imgs le tableau résultat de (gimp-image-list) :
    let (imgs (gimp-image-list) )
  • Si on veut immédiatement se resservir de la valeur de imgs, il faut utiliser let *
    Donc :
    let* (
    (imgs (gimp-image-list))
    )
  • Mettre le nombre d’images dans la variable nb-imgs :
    let* (
    (imgs (gimp-image-list))
    (nb-imgs (car imgs))
    )
  • Mettre le reste du tableau dans la variable img-array :
    let* (
    (imgs (gimp-image-list))
    (nb-imgs (car imgs))
    (img-array (cadr imgs))
    )

The Gimp et Script-fu : afficher tous les ordres disponibles

L’une des fonctions les plus intéressantes de The Gimp est la possibilité d’écrire des scripts afin d’automatiser les manipulations. Ces scripts sont écrit en langage « Script-Fu« .
Si vous avez un peu fait de Script-Fu, voilà une astuce pour afficher rapidement tous les ordres disponibles en Script-Fu pour The Gimp version 2.6.3.

  1. Allez dans le menu Script, choisissez « Script-Fu », et dans le sous-menu, choisissez : « console » : Script-Fu 01
  2. Une fenêtre de console s’ouvre. Cliquez sur le bouton « parcourir » : Script-Fu 02
  3. Et là vous avez le navigateur qui affiche tous les Script-Fu disponibles, vous pouvez en voir les sources et faire ce que vous voulez avec : Script-Fu 03
  4. Mais vous pouvez faire mieux : tapez « new » et ainsi vous aurez pratiquement tous les ordres « Script-Fu » qui servent à créer un nouvel objet : ainsi vous saurez quels sont tous les objets qu’il est possible de créer sous The Gimp :
    Script-Fu 04