Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gimp script-fu: drawing a simple line

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 -
like image 434
Pierre Avatar asked Feb 11 '26 04:02

Pierre


1 Answers

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)
like image 185
xenoid Avatar answered Feb 17 '26 14:02

xenoid



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!