René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Script-FU example 13: Left-right justifying text

Justifies the passed text to 250 pixels.
The following helper function returns the width of the passed string (for the passed font and font-size):
get_text_width.scm
(define (get-text-width  text font-name font-size)

  (let* (
           (text-width)
           (text-extents)
        )

        (set! text-extents (gimp-text-get-extents-fontname text font-size PIXELS font-name))

        (set! text-width (car text-extents))

        ; return the width of the text
        text-width
  )
)
ex_13.scm
(define (ex_13 text)

  (let* (
           (nof-chars (string-length text))
           (cur-pos    0)
           (cur-letter)

           (width 250)


           (my-image (car (gimp-image-new width width RGB      )))
           (my-layer (car (gimp-layer-new my-image width width RGB-IMAGE "my layer" 100 NORMAL)))

           (font-name "Verdana")
           (font-size 24)

           ;total-text-width is the width of the text if it were not justified to width
           (total-text-width (get-text-width text font-name font-size))

           (space-between-letters (/ (- width total-text-width) (- nof-chars 1)))
           (x-pos-next-letter 0)

           (char-layer)

        )


        (gimp-image-add-layer my-image my-layer 0)
        (gimp-context-set-background '(123 231 012))
        (gimp-context-set-foreground '(012 123 231))
        (gimp-drawable-fill my-layer BACKGROUND-FILL)


        (while (< cur-pos nof-chars)
           (set! cur-letter (substring text cur-pos (+ cur-pos 1)))

           (set! char-layer (car (gimp-text-fontname my-image my-layer x-pos-next-letter 10 cur-letter 0 TRUE font-size PIXELS font-name)))

           (gimp-floating-sel-anchor  char-layer)

           (set! x-pos-next-letter (+ x-pos-next-letter space-between-letters (get-text-width cur-letter font-name font-size)))
           (set! cur-pos (+ cur-pos 1))
        )
     
  ;  (gimp-display-new my-image)
     (gimp-file-save RUN-NONINTERACTIVE my-image my-layer "c:\\temp\\ex_13.jpg" "")
  )

)
For some reason, spaces don't work, therefore, I use a hyphen.
c:\> start gimp-2.2.exe -d -i -b  "(ex_13 \"Hello-World\")" "(gimp-quit 0)"
See also other examples