professor (for...@gimpusers.com) wrote:
> I need a script that changes the opacity of a layer and then saves the whole
> image as a PNG file. So I wrote the following script:
> 
> #!/bin/sh
> 
> gimp -i -b - <<EOF
> (
> let* ((image (car (gimp-file-load 1 "test.xcf" "test.xcf")))
>        (drawable (car (gimp-image-get-active-layer 1))))
> 
> (gimp-layer-set-opacity drawable 50)
> 
> (let* ((new-layer (car (gimp-image-merge-visible-layers image
> EXPAND-AS-NECESSARY)))))
> 
> (gimp-file-save RUN-NONINTERACTIVE image new-layer "test-40.png"
> "test-40.png")
> (gimp-quit 0)
> )
> 
> However, an error message appears saying "error: eval: unbound variable
> new-layer".
> 
> So what am I doing wrong here?

Variables declared with a let or a let* block are only valid *inside*
the block. So basically your additional let* block has no real effect in
terms of variables, since you close it immediately again (It does have
the side effect of merging the visible layers).

I would probably do it like this:

  (let* ((image (car (gimp-file-load 1 "test.xcf" "test.xcf")))
         (drawable (car (gimp-image-get-active-layer 1)))
         (new-layer 0))
  
    (gimp-layer-set-opacity drawable 50)
    (set! new-layer (car (gimp-image-merge-visible-layers image 
EXPAND-AS-NECESSARY)))
  
    (gimp-file-save RUN-NONINTERACTIVE image new-layer "test-40.png" 
"test-40.png")
    (gimp-quit 0)
  )

If you want to avoid the set! (it is kind of frowned upon, but
frequently makes the code easier to read and handle), you could do it
like this:
  

  (let* ((image (car (gimp-file-load 1 "test.xcf" "test.xcf")))
         (drawable (car (gimp-image-get-active-layer 1)))
         (new-layer 0))
  
    (gimp-layer-set-opacity drawable 50)
    (let* (new-layer (car (gimp-image-merge-visible-layers image 
EXPAND-AS-NECESSARY)))
      (gimp-file-save RUN-NONINTERACTIVE image new-layer "test-40.png" 
"test-40.png")
    )
    (gimp-quit 0)
  )

Watch how the code is nested here. The new-layer variable goes out of
scope (loses its meaning) after the closing parentheses in the following
line.

Note that this is untested code.

Hope this helps,
        Simon
-- 
              si...@budig.de              http://simon.budig.de/
_______________________________________________
Gimp-user mailing list
Gimp-user@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-user

Reply via email to