samguyjones
samguyjones

Reputation: 96

How to export flattened image with GIMP Script-Fu

I've got a script that's supposed to flatten, resize and export an initial image. I'm stuck on the export. I'm using file-png-save. It seems fine with my parameters except for the third parameter, which is supposed to be a drawable.

For the drawable, I'm using the flattened layer I got from gimp-image-flatten. I'm getting a response that my third argument is invalid. Do layers not always work as drawables? Do I need to convert it?

(define (script-fu-panel-export inImg drawable inWidth)
    (define filename (car(gimp-image-get-filename inImg)))
    (define comHeight (/ inWidth .75))
    (define piece (car(cdr(cdr(cdr(cdr(cdr(strbreakup filename "/"))))))))
    (define base (car(strbreakup piece ".")))
    (define destination (string-append "/home/samjones/Dev/mobinge/lib/images/" base "-" (number->string inWidth) ".png"))
    (let* ((duplicateImg (car(gimp-image-duplicate inImg))))
    (gimp-image-scale duplicateImg inWidth comHeight)
    (let* ((flatLayer (gimp-image-flatten duplicateImg)))
    (file-png-save 1 duplicateImg flatLayer destination destination 1 0 0 0 0 0 0)
    )
    (gimp-display-new duplicateImg)
    )
)

(script-fu-register
    "script-fu-panel-export"
    "Export Panel. . ."
    "Creates a flattened image export to a selected size.."
    "Sam Jones"
    "copyright 2017, Sam Jones"
    "December 19, 2017"
    ""
    SF-IMAGE         "Image"        0
    SF-DRAWABLE      "Maybe unused" 0
    SF-ADJUSTMENT    "Width"        '(320 20 1200 10 50 0 SF-SLIDER)
)

(script-fu-menu-register "script-fu-panel-export" "<Image>/Filters")

Upvotes: 5

Views: 2428

Answers (2)

stackprotector
stackprotector

Reputation: 13480

You are not accessing the desired element of the result of gimp-image-flatten. Use car to access it:

(let* ((flatLayer (car (gimp-image-flatten duplicateImg))))
    (file-png-save 1 duplicateImg flatLayer destination destination 1 0 0 0 0 0 0)
)

Upvotes: 0

samguyjones
samguyjones

Reputation: 96

Looking around for people who save from scripts, I found a slightly different route that worked. I replaced these two lines:

(let* ((flatLayer (gimp-image-flatten duplicateImg)))
(file-png-save 1 duplicateImg flatLayer destination destination 1 0 0 0 0 0 0))

With this:

(gimp-image-flatten duplicateImg)
(file-png-save 1 duplicateImg (car(gimp-image-get-active-drawable duplicateImg))_destination destination 1 0 0 0 0 0 0)

So I think gimp-image-flatten probably returns a list with the layer as its first element instead of returning a layer. I now know that gimp-image-get-active returns a list with the element.

It's weird, but it works.

Upvotes: 1

Related Questions