2017-08-23 3 views
1

J'essaie de faire la chose la plus simple avec GIMP Script-Fu, et il me manque quelque chose de basique.GIMP script-fu (schéma) copier/coller d'une image à l'autre

J'ai créé une image grise 100x100 et une image noire 200x200, et j'essaie de copier le carré gris sur le carré noir. La sortie est cependant juste un carré noir (pas de carré gris à trouver). Ceci est un test-type minimal de quelque chose de plus impliqué que j'essaie de faire (impliquant 2 images séparées), mais je vais aborder un problème à la fois. Basé sur mon propre dépannage, il semble que le problème pourrait être dans l'étape de copier/coller, mais malheureusement, je ne comprends pas très bien la documentation pour (gimp-edit-copy) et (gimp-edit-coller) dans le navigateur de procédure Script-Fu.

Où est-ce que je me suis trompé?

Merci

; 1) save this file as `$HOME/.gimp-2.8/scripts/copy-test.scm' 
; 2) $ gimp -i -b '(copy-test)' -b '(gimp-quit 0)' 
; 3) check `out.png' for result 

(define (copy-test) 
    (let* (; create 100x100 image img-a & 200x200 image img-b 
     (img-a (car (gimp-image-new 100 100 RGB))) 
     (img-b (car (gimp-image-new 200 200 RGB))) 

     ; make new layers for each image 
     (layer-a0 
      (car (gimp-layer-new 
        img-a 100 100 RGB-IMAGE "a0" 100 NORMAL-MODE))) 
     (layer-b0 
      (car (gimp-layer-new 
        img-b 200 200 RGB-IMAGE "b0" 100 NORMAL-MODE)))) 

    ; insert layers into appropriate images 
    (gimp-image-insert-layer img-a layer-a0 0 0) 
    (gimp-image-insert-layer img-b layer-b0 0 0) 

    (let (; get the drawables for each image 
      (draw-a (car (gimp-image-get-active-layer img-a))) 
      (draw-b (car (gimp-image-get-active-layer img-b)))) 

     ; change img-a from black to gray 
     (plug-in-exchange 
     RUN-NONINTERACTIVE img-a draw-a 0 0 0 128 128 128 1 1 1) 

     ; copy/paste a (100px gray) onto b (200px black) 
     (gimp-edit-copy draw-a) 
     (gimp-edit-paste draw-b TRUE) 

     ; save output to result.png 
     (gimp-file-save 
     RUN-NONINTERACTIVE img-b draw-b "out.png" "out.png")))) 

MISE À JOUR:

la suggestion de xenoid, remplaçant

(gimp-edit-paste draw-b TRUE) 

avec

(gimp-floating-sel-anchor 
    (car (gimp-edit-paste draw-b TRUE))) 

résolu le problème.

Répondre

1

Pour autant que je peux dire, votre gimp-edit-paste crée une sélection flottante (une sorte de couche temporaire), mais cela ne change pas jusqu'à ce que vous draw-b « ancre » que la sélection flottante (gimp-floating-sel-anchor). Ensuite, gimp-file-save enregistre uniquement la couche et non toute l'image, donc votre pâte n'est pas incluse dans le fichier. Lorsque vous créez des images dans vos scripts, il est utile (au moins lors du débogage) de les associer à un «affichage» (gimp-display-new), ce qui rend beaucoup plus évidents de tels problèmes).

+0

Merci! Depuis '(gimp-edit-coller)' renvoie la nouvelle sélection flottante, je l'ai remplacé '(gimp-edit-coller draw-b TRUE)' avec '(gimp-flottante-sel-ancre (voiture (gimp-édition-pâte draw-b TRUE))) ' et cela a fonctionné. Merci également pour la pointe '(gimp-display-new)', qui aide beaucoup. – msp