Demande d'aide pour écrire un script-fu

Gimp est le fabuleux logiciel open source de dessin 2D de qualité professionnelle.
Joël
Messages : 6
Inscription : 04 janv. 2016, 18:32

Demande d'aide pour écrire un script-fu

Message par Joël »

Bonjour à tous,

Utilisateur de Gimp depuis de nombreuses années, je suis sous Linux (Mageia).

Pour une importante série de photos, j'applique un traitement assez répétitif, et je commence à en avoir assez.

J'ai donc voulu scripter cela, bien que n'ayant aucune connaissance en programmation, ni en anglais d'ailleurs, que je n'ai jamais appris, ce qui est plutôt handicapant.

Cela fait donc plusieurs jours que je lis des tutos (à commencer par http://docs.gimp.org/fr/gimp-using-scri ... orial.html) et que j'examine des script-fu trouvés sur http://registry.gimp.org/glossary/a

J'ai finalement essayé d'adapter ce script :

Code : Tout sélectionner

(define (batch-crop-center pattern
                           width
                           height)
    (let* ((filelist (cadr (file-glob pattern 1))))
        (while (not (null? filelist))
            (let* ((filename (car filelist))
                (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename )))
                (drawable (car (gimp-image-get-active-layer image))))
                (let* ((original-width (car (gimp-image-width image)))
                (original-height (car (gimp-image-height image)))
                )
                (if (<= (/ original-width original-height) (/ width height))
                    (gimp-image-crop image original-width (* original-width (/ height width)) 0 (/ (- original-height (* original-width (/ height width))) 2) )
                    (gimp-image-crop image (* original-height (/ width height)) original-height (/ (- original-width (* original-height (/ width height))) 2) 0)
                )
                )
                
                (set! drawable (car (gimp-image-get-active-layer image)))
                (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename))
                ;(gimp-image-delete image))
			
            (set! filelist (cdr filelist))
        )
    )
)
trouvé sur http://registry.gimp.org/node/27360, parce qu'il n'utilse pas d'interface graphique, ce dont je n'ai pas besoin dans un premier temps.

Ce que je veux, c'est prendre toutes les images d'un dossier, et, dans un premier temps, dupliquer le calque et appliquer une correction automatique des niveaux.

Par la suite, quand j'arriverai à produire cette première étape, le but final est de produire plusieurs calques avec des modes de calques différents, puis en graphique, voir ce qui rend le mieux.

J'ai donc écrit ceci :

Code : Tout sélectionner

(define (sript-fu-niveau pattern)
    (let* ((filelist (cadr (file-glob pattern 1))))
        (while (not (null? filelist))
            (let* ((filename (car filelist))
		(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename )))
		(drawable (car (gimp-image-get-active-layer image))))
		(set! width (car (gimp-image-width image)))
		(set! height (car (gimp-image-height image)))
		(let* new-layer (car ((gimp-layer-new image width height RGBA-IMAGE "niveau" 100 NORMAL))) ; création d'un nouveau calque avec, en paramètres, la largeur et la hauteur renvoyées, son mode image, son nom, son opacité et son mode de calque. Et définition de la variable "new-layer" dont on aura besoin tout de suite.
		(gimp-image-add-layer image new-layer -1) ; sert à ajouter ce calque à l'image. La valeur -1 permet d'insérer le calque au-dessus du calque actif.
		(gimp-levels-stretch new-layer) ; applique un niveau automatique
		(set! drawable (car (gimp-image-get-active-layer image)))
                (gimp-file-save RUN-NONINTERACTIVE image drawable filename filename))
            (set! filelist (cdr filelist))
	    )
	 )
     )
 ) 
mais quand je l'exécute ainsi:

Code : Tout sélectionner

$ gimp-2.8 -i --verbose -b "(script-fu-niveau \"/tmp/png/*.png\" )" -b "(gimp-quit 0)"
, il me répond :

Code : Tout sélectionner

Aucun interpréteur batch indiqué, utilisation de « plug-in-script-fu-eval » par défaut.
batch command experienced an execution error:
Error: ( : 1) eval: unbound variable: script-fu-niveau 
et je n'arrive pas à trouver pourquoi.

Pouvez-vous m'expliquer à quoi je dois lier cette variable ?
* Gimp 2.8.14 sur Mageia5 *
Ofnuts
Messages : 144
Inscription : 24 févr. 2015, 21:18

Re: Demande d'aide pour écrire un script-fu

Message par Ofnuts »

Je connais mal script-fu. J'utilise Python-fu, c'est plus facile et plus puissant.

Cela dit, dès que j'entends batch et Gimp dans le même phrase, je regarde d'abord si ImageMagick ne peut pas faire le boulot (soit en l'appelant comme shell, soit en utilisant es bindings Python).

Cela dit, y'a peut-être un 'script-fu' de trop; appelle ta fonction 'niveau', il est possible que le préfixe 'script-fu' soit implicite.

Sinon j'ai un exemple de batch Gimp, mais c'est du Python:)
Joël
Messages : 6
Inscription : 04 janv. 2016, 18:32

Re: Demande d'aide pour écrire un script-fu

Message par Joël »

Merci Ofnuts,
Ofnuts a écrit :Je connais mal script-fu. J'utilise Python-fu, c'est plus facile et plus puissant.
Tu connais des tutos en français qui détaillent commen faire en Python-fu ?
Ofnuts a écrit :Cela dit, dès que j'entends batch et Gimp dans le même phrase, je regarde d'abord si ImageMagick ne peut pas faire le boulot (soit en l'appelant comme shell, soit en utilisant es bindings Python).
ImageMagick est en anglais, mais je ne crois pas qu'il fasse ce que je désire : multiplier les calques, leur appliquer à chacun un mode de calque et un traitement différent.
Ofnuts a écrit :Cela dit, y'a peut-être un 'script-fu' de trop; appelle ta fonction 'niveau', il est possible que le préfixe 'script-fu' soit implicite.
J'ai trouvé ce qui n'allait pas : j'avais écrit 'sript-fu' et j'appelais 'script-fu'.

Après correction, j'ai maintenant une autre erreur :

Code : Tout sélectionner

batch command experienced an execution error:
Error: ( : 1) not enough arguments 
Pas très explicite...
Ofnuts a écrit :Sinon j'ai un exemple de batch Gimp, mais c'est du Python:)
Ben, si c'est commenté explicitement en français, ça m'intéresse.
Merci d'avance.
* Gimp 2.8.14 sur Mageia5 *
Ofnuts
Messages : 144
Inscription : 24 févr. 2015, 21:18

Re: Demande d'aide pour écrire un script-fu

Message par Ofnuts »

1) non, mais tu peux facilement trouver des tutos en Français sur Python, c'est un langage nettement plus populaire que Scheme (aka script-fu). Cela dit, je viens d'avoir récemment une discussion sur un forum Python ou il s'avérait que l'auteur des questions avait suivi un tutoriel de merde. C'est l'avantage des bouquins, l'auteur est quand même supposé avoir un peu plus de crédibilité que le bloggeur/youtubeur lambda.

2) Avec ImageMagick tu ne vois pas de calques mais des images individuelles que tu compose pour faire ton image finale. Et il y a plus de modes de composition qu'avec Gimp: http://www.imagemagick.org/Usage/compose/

3) Pas d'idée. Tu peux demander sur GimpForums ou GimpChat

4) Pas terriblement commenté et en Anglais. Mais tu peux jeter un oeil: https://www.dropbox.com/s/ta1ueqkn0u6f0 ... h.zip?dl=0
Joël
Messages : 6
Inscription : 04 janv. 2016, 18:32

Re: Demande d'aide pour écrire un script-fu

Message par Joël »

Ofnuts a écrit :2) Avec ImageMagick tu ne vois pas de calques mais des images individuelles que tu compose pour faire ton image finale. Et il y a plus de modes de composition qu'avec Gimp: http://www.imagemagick.org/Usage/compose/
Bon, je vais voir si je trouve des explications en français pour imagemagick...
Ofnuts a écrit :3) Pas d'idée. Tu peux demander sur GimpForums ou GimpChat
Toujours en anglais...
Je vais essayer sur ces forums, ou l'on parle un peu de scheme :
http://www.commentcamarche.net/forum/
https://openclassrooms.com/forum/
Ofnuts a écrit :4) Pas terriblement commenté et en Anglais. Mais tu peux jeter un oeil: https://www.dropbox.com/s/ta1ueqkn0u6f0 ... h.zip?dl=0
Effectivement, pas beaucoup de commentaires :(
* Gimp 2.8.14 sur Mageia5 *
Joël
Messages : 6
Inscription : 04 janv. 2016, 18:32

Re: Demande d'aide pour écrire un script-fu

Message par Joël »

Ofnuts a écrit :Je connais mal script-fu. J'utilise Python-fu, c'est plus facile et plus puissant.
Je vois que tu en es un spécialiste :
http://gimpforums.com/thread-debugging- ... fu-scripts
* Gimp 2.8.14 sur Mageia5 *
Bebert
Messages : 271
Inscription : 30 déc. 2004, 17:08
Localisation : Nord (France)

Re: Demande d'aide pour écrire un script-fu

Message par Bebert »

Ofnuts a écrit :Je connais mal script-fu. J'utilise Python-fu, c'est plus facile et plus puissant.
Pas tout à fait d'accord, mais bon... Je ne fais pas trop de script-fu non plus, mais j'ai déjà pu testé les deux langages pour d'autres choses.

Python est apparemment plus facile, mais assez brut de décoffrage, et pas toujours plus performant (notamment en vitesse d'exécution) que Scheme , un peu plus souple, avec lequel sont quand même écrits la plupart des script-fu de Gimp.

Cela dit, Python est effectivement plus populaire, sans doute à cause de son apparente facilité, et on trouve donc beaucoup de tutoriels pour s'y initier, mais il faut faire le tri (quantité, et/ou popularité, n'est pas toujours synonyme de qualité).
Gimp 2.8.22 et Kdenlive 18.12.1
-- Peppermint 9 (x86_64) sur Intel Celeron 900 CPU 2.20GHz / Intel GL40 Express - mémoire vive 3 Go
Ofnuts
Messages : 144
Inscription : 24 févr. 2015, 21:18

Re: Demande d'aide pour écrire un script-fu

Message par Ofnuts »

Bebert a écrit :
Ofnuts a écrit :Je connais mal script-fu. J'utilise Python-fu, c'est plus facile et plus puissant.
Pas tout à fait d'accord, mais bon... Je ne fais pas trop de script-fu non plus, mais j'ai déjà pu testé les deux langages pour d'autres choses.

Python est apparemment plus facile, mais assez brut de décoffrage, et pas toujours plus performant (notamment en vitesse d'exécution) que Scheme , un peu plus souple, avec lequel sont quand même écrits la plupart des script-fu de Gimp.

Cela dit, Python est effectivement plus populaire, sans doute à cause de son apparente facilité, et on trouve donc beaucoup de tutoriels pour s'y initier, mais il faut faire le tri (quantité, et/ou popularité, n'est pas toujours synonyme de qualité).
C'est vrai que Scheme, ça date des années 50, ça a eu le temps de prendre de la patine. Scheme n'est pas plus souple que Python, et si les scripts Gimp sont surtout écrits avec, c'est parce que c'est le langage de script historique, et le choix de l'interpreteur s'est fait à l'époque pour des raisons très techniques, l'interpréteur est très léger (et Python, qui n'a que 5 ans de plus que Gimp, devait manquer de maturité/popularité à l'époque). De ma fenêtre de modérateur sur GimpForums, je vois les débutants qui se tirent des balles avec Scheme pour faire des trucs qui sont tout cons à faire en Python. En plus Script-fu est très restreint à Gimp, tandis qu'avec Python tu peux utiliser des librairies existantes pour faire tout et n'importe quoi. Va lire un XML, un XLS ou même un CSV avec un Script-fu...
Répondre