Je suis occupé avec un Script-fu et continue d'obtenir "Erreur (: 1) fonction illégale". Je ne suis pas un expert Scheme/Lisp, essayant juste d'automatiser certaines tâches photographiques. La documentation est rare - soit GiMP n'écrit que sur ses propres actions internes, mais pas sur la syntaxe de Scheme dans Script-fu, ou je trouve des "trucs" pour GiMP v1.0 (c'est-à-dire si datés qu'ils sont inutiles).GiMP (Scheme) Erreur Script-fu "fonction illégale"
J'ai regardé un tas de scripts fournis avec GiMP, essayant d'en savoir plus et de comprendre cela, mais en vain. Je demande ici pour aider à supprimer le bug, pas mise en retrait ou le fait qui existe Python-fu, etc.
Et avec cela, le code (réduit à squelette fonctionnel):
;;
;; license, author, blah blah
;; FOR ILLUSTRATION PURPOSES
;; GiMP 2.8 LinuxMint 18.1
;; does the work, but then blows up saying "Error (: 1) illegal function"
;;
(define (script-fu-ScriptFails InImage InLayer pickd mrge)
(let* (
(CopyLayer (car (gimp-layer-copy InLayer TRUE)))
)
(gimp-image-undo-group-start InImage)
(gimp-image-add-layer InImage CopyLayer -1)
(gimp-drawable-set-visible CopyLayer TRUE)
;; Perform CHOSEN action on CopyLayer
(if (equal? pickd 0) ( ;; keep just the RED
(plug-in-colors-channel-mixer TRUE InImage CopyLayer FALSE 1.0 0 0 0 0 0 0 0 0)
(gimp-drawable-set-name CopyLayer "RED")
))
(if (equal? pickd 1) ( ;; keep just the GREEN
(plug-in-colors-channel-mixer TRUE InImage CopyLayer FALSE 0 0 0 0 1.0 0 0 0 0)
(gimp-drawable-set-name CopyLayer "GRN")
))
(if (equal? pickd 2) ( ;; keep just the BLUE
(plug-in-colors-channel-mixer TRUE InImage CopyLayer FALSE 0 0 0 0 0 0 0 0 1.0)
(gimp-drawable-set-name CopyLayer "BLU")
))
(if (equal? mrge #t) ( ;; to merge or not to merge
(gimp-layers-flatten InImage)
))
(gimp-image-undo-group-end InImage)
(gimp-display-flush)
)
)
(script-fu-register "script-fu-ScriptFails"
_"<Image>/Script-Fu/ScriptFails..."
"Runs but fails at the end. Why? Please help!"
"JK"
"(pop-zip,G-N-U)"
"2016.12"
"RGB*"
SF-IMAGE "The Image" 0
SF-DRAWABLE "The Layer" 0
;; other variables:
SF-OPTION "Effect" '("R_ed" "G_rn" "B_lu")
SF-TOGGLE "Merge Layers" FALSE
)
Merci beaucoup, Sylwester. Votre explication du 'début' est tout à fait logique - j'ai négligé cela quand j'ai essayé de prendre un peu de Scheme. J'avais regardé tant d'exemples différents et d'autres scripts que je commençais à hypnotiser. Changer cela à la syntaxe correcte en utilisant quand tout fait fonctionner. J'avais mon C-brain traditionnel essayant de créer un bloc pour les deux instructions. Scheme, une autre petite histoire. Amusant à apprendre. Encore merci! – fotonix