Skip to content

Instantly share code, notes, and snippets.

@devsli
Created September 10, 2016 19:46
Show Gist options
  • Save devsli/cec2983ce75019bd48e0f00052aab523 to your computer and use it in GitHub Desktop.
Save devsli/cec2983ce75019bd48e0f00052aab523 to your computer and use it in GitHub Desktop.
GIMP: Put text in bubble script
(define (script-fu-bubble image drawable tail-length tail-offset tail-width)
(let* (
(selected-layer (car (gimp-image-get-active-layer image)))
(width (car (gimp-image-width image)))
(height (car (gimp-image-height image)))
(image-mode 1)
(bubble-layer-name "Bubble")
(bubble-opacity 100)
(overlay-mode NORMAL-MODE)
(bubble-layer (car (gimp-layer-new image width height image-mode bubble-layer-name bubble-opacity overlay-mode)))
(outline-size 15)
)
(gimp-image-undo-group-start image)
(gimp-image-add-layer image bubble-layer (get-sublayer-position image selected-layer))
(gimp-edit-clear bubble-layer)
(draw-left-circle image bubble-layer selected-layer outline-size)
(draw-right-circle image bubble-layer selected-layer outline-size)
(draw-body image bubble-layer selected-layer outline-size)
(draw-tail image bubble-layer selected-layer outline-size tail-length tail-offset tail-width)
(gimp-selection-none image)
(gimp-image-undo-group-end image)
(gimp-displays-flush)
)
)
(define (draw-tail image draw-layer source-layer outline-size tail-length tail-offset tail-width)
(let*
(
(tail-vector (car (gimp-vectors-new image "bubble-tail")))
(tail-root-x (circle-left-center-x image source-layer))
(tail-root-y (+ (content-bottom image source-layer) outline-size))
(dots (list
(list tail-root-x tail-root-y)
(list (- tail-root-x tail-offset) (+ tail-root-y tail-length))
(list (+ tail-root-x tail-width) tail-root-y)))
)
(gimp-image-add-vectors image tail-vector -1)
(gimp-vectors-stroke-new-from-points
tail-vector
VECTORS-STROKE-TYPE-BEZIER
(* (length dots) 6)
(vector
(car(car dots)) (cadr(car dots)) (car(car dots)) (cadr(car dots)) (car(car dots)) (cadr(car dots))
(car(cadr dots)) (cadr(cadr dots)) (car(cadr dots)) (cadr(cadr dots)) (car(cadr dots)) (cadr(cadr dots))
(car(caddr dots)) (cadr(caddr dots)) (car(caddr dots)) (cadr(caddr dots)) (car(caddr dots)) (cadr(caddr dots))
)
TRUE)
(gimp-path-to-selection image "bubble-tail" CHANNEL-OP-REPLACE TRUE FALSE 0 0)
(gimp-edit-fill draw-layer 1)
(gimp-image-remove-vectors image tail-vector)
)
)
(define (draw-body image draw-layer source-layer outline-size)
(gimp-rect-select
image
(circle-left-center-x image source-layer)
(- (content-top image source-layer) outline-size)
(- (content-width image source-layer) (content-height image source-layer))
(bubble-height image source-layer outline-size)
CHANNEL-OP-REPLACE
FALSE
0)
(gimp-edit-fill draw-layer 1)
)
(define (circle-left-center-x image source-layer)
(+ (content-left image source-layer) (/ (content-height image source-layer) 2))
)
(define (draw-left-circle image draw-layer source-layer outline-size)
(draw-circle
image
draw-layer
(- (content-left image source-layer) outline-size)
(- (content-top image source-layer) outline-size)
(bubble-height image source-layer outline-size)
)
)
(define (draw-right-circle image draw-layer source-layer outline-size)
(draw-circle
image
draw-layer
(- (content-right image source-layer) (+ outline-size (content-height image source-layer)))
(- (content-top image source-layer) outline-size)
(bubble-height image source-layer outline-size)
)
)
(define (bubble-height image source-layer outline-size) (+ (content-height image source-layer) (* outline-size 2)))
(define (content-height image layer)
(-
(content-bottom image layer)
(content-top image layer)
)
)
(define (content-width image layer)
(-
(content-right image layer)
(content-left image layer)
)
)
(define (content-top image layer)
(gimp-selection-layer-alpha layer)
(caddr (gimp-selection-bounds image))
)
(define (content-bottom image layer)
(gimp-selection-layer-alpha layer)
(caddddr (gimp-selection-bounds image))
)
(define (content-left image layer)
(gimp-selection-layer-alpha layer)
(cadr (gimp-selection-bounds image))
)
(define (content-right image layer)
(gimp-selection-layer-alpha layer)
(cadddr (gimp-selection-bounds image))
)
(define (draw-circle image layer x y size)
(gimp-ellipse-select image x y size size CHANNEL-OP-REPLACE TRUE FALSE 0)
(gimp-edit-fill layer 1)
)
(define (get-sublayer-position image layer)
(+
(car (gimp-image-get-layer-position image layer))
1
)
)
(define (caddddr input-list)
(car (cdr (cdr (cdr (cdr input-list)))))
)
(script-fu-register "script-fu-bubble"
_"Put in bubble..."
_"Put current level item into the comix bubble"
"Leonid Suprun"
"Leonid Suprun"
"2008"
"RGBA"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Tail length (pixels)" '(20 1 500 1 10 0 0)
SF-ADJUSTMENT "Tail end offset (pixels)" '(20 1 500 1 10 0 0)
SF-ADJUSTMENT "Tail root width (pixels)" '(40 1 500 1 10 0 0)
)
(script-fu-menu-register "script-fu-bubble" "<Image>/Filters/Alpha to Logo")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment