From 3d049f565a3a88189e8d28562c0298042f717c2c Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Sun, 14 Jul 2019 13:59:11 +0200 Subject: [PATCH] Issue #360 - scripts that require brushes that GIMP no longer installs carve-it.scm, chrome-it.scm: apply slightly modified patch from Carol Spears which replaces hardcoding round brush names by creating a brush on the fly and setting its radius. Also fixed both scripts to not use deprecated color API which is even completely gone from master. --- plug-ins/script-fu/scripts/carve-it.scm | 42 +++++++++++++-------- plug-ins/script-fu/scripts/chrome-it.scm | 48 ++++++++++++------------ 2 files changed, 51 insertions(+), 39 deletions(-) diff --git a/plug-ins/script-fu/scripts/carve-it.scm b/plug-ins/script-fu/scripts/carve-it.scm index efe2279194..a88fa086eb 100644 --- a/plug-ins/script-fu/scripts/carve-it.scm +++ b/plug-ins/script-fu/scripts/carve-it.scm @@ -6,24 +6,15 @@ ; This layer is used as the mask for the carving effect ; NOTE: This script requires the image to be carved to either be an ; RGB color or grayscale image with a single layer. An indexed file -; can not be used due to the use of gimp-histogram and gimp-levels. +; can not be used due to the use of gimp-drawable-histogram and +; gimp-drawable-levels. -(define (carve-brush brush-size) - (cond ((<= brush-size 5) "Circle (05)") - ((<= brush-size 7) "Circle (07)") - ((<= brush-size 9) "Circle (09)") - ((<= brush-size 11) "Circle (11)") - ((<= brush-size 13) "Circle (13)") - ((<= brush-size 15) "Circle (15)") - ((<= brush-size 17) "Circle (17)") - (else "Circle (19)"))) - (define (carve-scale val scale) (* (sqrt val) scale)) (define (calculate-inset-gamma img layer) - (let* ((stats (gimp-histogram layer 0 0 255)) + (let* ((stats (gimp-drawable-histogram layer 0 0.0 1.0)) (mean (car stats))) (cond ((< mean 127) (+ 1.0 (* 0.5 (/ (- 127 mean) 127.0)))) ((>= mean 127) (- 1.0 (* 0.5 (/ (- mean 127) 127.0))))))) @@ -56,6 +47,7 @@ (offy (carve-scale size 0.25)) (feather (carve-scale size 0.3)) (brush-size (carve-scale size 0.3)) + (brush-name (car (gimp-brush-new "Carve It"))) (mask-fs 0) (mask (car (gimp-channel-new img width height "Engraving Mask" 50 '(0 0 0)))) (inset-gamma (calculate-inset-gamma (car (gimp-item-get-image bg-layer)) bg-layer)) @@ -100,7 +92,17 @@ (set! mask-fat (car (gimp-channel-copy mask))) (gimp-image-insert-channel img mask-fat -1 0) (gimp-image-select-item img CHANNEL-OP-REPLACE mask-fat) - (gimp-context-set-brush (carve-brush brush-size)) + + (gimp-brush-set-shape brush-name BRUSH-GENERATED-CIRCLE) + (gimp-brush-set-spikes brush-name 2) + (gimp-brush-set-hardness brush-name 1.0) + (gimp-brush-set-spacing brush-name 25) + (gimp-brush-set-aspect-ratio brush-name 1) + (gimp-brush-set-angle brush-name 0) + (cond (<= brush-size 17) (gimp-brush-set-radius brush-name (\ brush-size 2)) + (else gimp-brush-set-radius brush-name (\ 19 2))) + (gimp-context-set-brush brush-name) + (gimp-context-set-foreground '(255 255 255)) (gimp-drawable-edit-stroke-selection mask-fat) (gimp-selection-none img) @@ -120,10 +122,16 @@ (set! mask-highlight (car (gimp-channel-copy mask-emboss))) (gimp-image-insert-channel img mask-highlight -1 0) - (gimp-levels mask-highlight 0 180 255 1.0 0 255) + (gimp-drawable-levels mask-highlight 0 + 0.7056 1.0 TRUE + 1.0 + 0.0 1.0 TRUE) (set! mask-shadow mask-emboss) - (gimp-levels mask-shadow 0 0 180 1.0 0 255) + (gimp-drawable-levels mask-shadow 0 + 0.0 0.70586 TRUE + 1.0 + 0.0 1.0 TRUE) (gimp-edit-copy mask-shadow) (set! shadow-layer (car (gimp-edit-paste layer1 FALSE))) @@ -159,7 +167,7 @@ (gimp-drawable-edit-fill il-mask FILL-BACKGROUND) (gimp-selection-none img) (gimp-selection-none bg-image) - (gimp-levels inset-layer 0 0 255 inset-gamma 0 255) + (gimp-drawable-levels inset-layer 0 0.0 1.0 TRUE inset-gamma 0.0 1.0 TRUE) (gimp-image-remove-channel img mask) (gimp-image-remove-channel img mask-fat) (gimp-image-remove-channel img mask-highlight) @@ -171,6 +179,8 @@ (gimp-item-set-name cast-shadow-layer _"Cast Shadow") (gimp-item-set-name inset-layer _"Inset") + (gimp-brush-delete brush-name) + (gimp-display-new img) (gimp-image-undo-enable img) diff --git a/plug-ins/script-fu/scripts/chrome-it.scm b/plug-ins/script-fu/scripts/chrome-it.scm index e5f1e1c378..761ac475ac 100644 --- a/plug-ins/script-fu/scripts/chrome-it.scm +++ b/plug-ins/script-fu/scripts/chrome-it.scm @@ -14,31 +14,20 @@ ) (define (spline-chrome-it) - (let* ((a (cons-array 18 'byte))) - (set-pt a 0 0 0) - (set-pt a 1 31 235) - (set-pt a 2 63 23) - (set-pt a 3 95 230) - (set-pt a 4 127 25) - (set-pt a 5 159 210) - (set-pt a 6 191 20) - (set-pt a 7 223 240) - (set-pt a 8 255 31) + (let* ((a (cons-array 18 'double))) + (set-pt a 0 0.0 0.0) + (set-pt a 1 0.125 0.9216) + (set-pt a 2 0.25 0.0902) + (set-pt a 3 0.375 0.9020) + (set-pt a 4 0.5 0.0989) + (set-pt a 5 0.625 0.9549) + (set-pt a 6 0.75 00784) + (set-pt a 7 0.875 0.9412) + (set-pt a 8 1.0 0.1216) a ) ) - (define (brush brush-size) - (cond ((<= brush-size 5) "Circle Fuzzy (05)") - ((<= brush-size 7) "Circle Fuzzy (07)") - ((<= brush-size 9) "Circle Fuzzy (09)") - ((<= brush-size 11) "Circle Fuzzy (11)") - ((<= brush-size 13) "Circle Fuzzy (13)") - ((<= brush-size 15) "Circle Fuzzy (15)") - ((<= brush-size 17) "Circle Fuzzy (17)") - (else "Circle Fuzzy (19)") - ) - ) (define (shadows val) (/ (* 0.96 val) 2.55) @@ -99,6 +88,7 @@ (offy2 (sota-scale size (- 0.25) chrome-factor)) (feather (sota-scale size 0.5 chrome-factor)) (brush-size (sota-scale size 0.5 chrome-factor)) + (brush-name (car (gimp-brush-new "Chrome It"))) (mask (car (gimp-channel-new img width height "Chrome Stencil" 50 '(0 0 0)))) (bg-layer (car (gimp-layer-new img width height GRAY-IMAGE _"Background" 100 LAYER-MODE-NORMAL))) (layer1 (car (gimp-layer-new img banding-width banding-height banding-type _"Layer 1" 100 LAYER-MODE-NORMAL))) @@ -154,7 +144,7 @@ (plug-in-gauss-iir RUN-NONINTERACTIVE img layer1 10 TRUE TRUE) (gimp-layer-set-opacity layer1 50) (set! layer1 (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE))) - (gimp-curves-spline layer1 HISTOGRAM-VALUE 18 (spline-chrome-it)) + (gimp-drawable-curves-spline layer1 HISTOGRAM-VALUE 18 (spline-chrome-it)) (set! layer-mask (car (gimp-layer-create-mask layer1 ADD-MASK-BLACK))) (gimp-layer-add-mask layer1 layer-mask) @@ -164,7 +154,17 @@ (set! layer2 (car (gimp-layer-copy layer1 TRUE))) (gimp-image-insert-layer img layer2 0 0) - (gimp-context-set-brush (brush brush-size)) + + (gimp-brush-set-shape brush-name BRUSH-GENERATED-CIRCLE) + (gimp-brush-set-spikes brush-name 2) + (gimp-brush-set-hardness brush-name 1.0) + (gimp-brush-set-spacing brush-name 25) + (gimp-brush-set-aspect-ratio brush-name 1) + (gimp-brush-set-angle brush-name 0) + (cond (<= brush-size 17) (gimp-brush-set-radius brush-name (\ brush-size 2)) + (else gimp-brush-set-radius brush-name (\ 19 2))) + (gimp-context-set-brush brush-name) + (gimp-context-set-foreground '(255 255 255)) (gimp-drawable-edit-stroke-selection layer-mask) @@ -219,6 +219,8 @@ (gimp-image-remove-channel img mask) + (gimp-brush-delete brush-name) + (gimp-display-new img) (gimp-image-undo-enable img)