I'm trying to draw a line using gimp scripting. In the following script: I create a new image 512x512 and a I try to draw a diagonal (0,0)->(512,512). But the image (tmp.xcf) remains transparent.
What am i doing wrong ?
(define (drawdiagonal W H)
(let* (
(img 0)
(bg 0)
(points (cons-array 4 'double) )
)
(set! img (car (gimp-image-new W H 0)))
(gimp-image-undo-group-start img)
(gimp-context-push)
(set! bg (car (gimp-layer-new img W H RGBA-IMAGE "background" 100 NORMAL-MODE)))
(gimp-image-add-layer img bg 0)
(gimp-drawable-set-visible bg TRUE)
(gimp-image-set-active-layer img bg)
(gimp-context-set-brush-size 10.0)
(gimp-context-set-opacity 100)
(gimp-context-set-paint-mode NORMAL-MODE)
(gimp-context-set-foreground '(255 127 0))
(gimp-selection-all img)
(aset points 0 0)
(aset points 1 0)
(aset points 2 W)
(aset points 3 H)
(gimp-paintbrush-default bg 4 points)
(gimp-context-pop)
(gimp-image-undo-group-end img)
(gimp-xcf-save 1 img img "tmp.xcf" "tmp.xcf")
(display "DONE")
)
)
(drawdiagonal 512 512) (gimp-quit 0)
usage:
cat test.scm | gimp -i -b -
It seems you are mostly missing:
(gimp-context-set-brush "Some brush")
Additionally, the 3rd argument there (2nd img
) should be a drawable:
(gimp-xcf-save 1 img img "tmp.xcf" "tmp.xcf")
PS: do yourself a favor and write your script in Python. See here for an example.
Edit post-Gimp 2.10: there is now an API to stroke paths in "Line" mode which is the best way to obtain clean results. The relevant calls are:
pdb.gimp_context_set_stroke_method(STROKE_LINE)
pdb.gimp_context_set_line_cap_style(...)
pdb.gimp_context_set_line_join_style(...)
pdb.gimp_context_set_line_miter_limit(...)
pdb.gimp_context_set_line_width(width)
pdb.gimp_drawable_edit_stroke_item(drawable, path)