Files
gimp/plug-ins/script-fu/scripts/carve-it.scm
Henrik Brix Andersen f36a63f68c removed function gimp_menu_path_strip_uline() ...
2003-08-09 Henrik Brix Andersen <brix@gimp.org>

* gimp/app/widgets/gimpwidgets-utils.[ch]: removed function
gimp_menu_path_strip_uline() ...

* gimp/libgimpbase/gimputils.[ch]: ... and added it here under the
name gimp_strip_uline()

* gimp/devel-docs/libgimpbase/libgimpbase-sections.txt: added
gimp_strip_uline to gimputils section

* gimp/app/plug-in/plug-in.c
* gimp/app/widgets/gimpitemfactory.c
* gimp/app/widgets/gimptoolbox.
* gimp/app/gui/plug-in-menus.c: changed accordingly

* gimp/plug-ins/script-fu/script-fu-scripts.c
(script_fu_interface): use gimp_strip_uline() to strip mnemonics
from script-fu menu paths

* gimp/app/gui/vectors-menu.c
* gimp/app/gui/templates-menu.c
* gimp/app/gui/qmask-menu.c
* gimp/app/gui/palettes-menu.c
* gimp/app/gui/palette-editor-menu.c
* gimp/app/gui/images-menu.c
* gimp/app/gui/gradients-menu.c
* gimp/app/gui/gradient-editor-menu.c
* gimp/app/gui/documents-menu.c
* gimp/app/gui/dialogs-menu.c
* gimp/app/gui/colormap-editor-menu.c
* gimp/app/gui/channels-menu.c
* gimp/app/gui/buffers-menu.c
* gimp/app/gui/brushes-menu.c
* gimp/app/gui/layers-menu.c
* gimp/plug-ins/pygimp/plug-ins/clothify.py
* gimp/plug-ins/pygimp/plug-ins/shadow_bevel.py
* gimp/plug-ins/pygimp/plug-ins/whirlpinch.py
* gimp/plug-ins/pygimp/plug-ins/foggify.py
* gimp/plug-ins/script-fu/scripts/*.scm
* gimp/plug-ins/script-fu/script-fu.c: added mnemonics fixing more
of bug #106991

* gimp/app/gui/error-console-menu.c (error_console_menu_update):
updated menu item names, added mnemonics

* gimp/plug-ins/common/animoptimize.c *
gimp/plug-ins/common/animationplay.c: don't prepend every menu
entry with "Animation"
2003-08-11 17:14:32 +00:00

190 lines
7.1 KiB
Scheme

; CARVE-IT
; Carving, embossing, & stamping
; Process taken from "The Photoshop 3 WOW! Book"
; http://www.peachpit.com
; This script requires a grayscale image containing a single layer.
; 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 colour or grayscale image with a single layer. An indexed file
; can not be used due to the use of gimp-histogram and gimp-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))
(mean (car stats)))
(cond ((< mean 127) (+ 1.0 (* 0.5 (/ (- 127 mean) 127.0))))
((>= mean 127) (- 1.0 (* 0.5 (/ (- mean 127) 127.0)))))))
(define (copy-layer-carve-it dest-image dest-drawable source-image source-drawable)
(gimp-selection-all dest-image)
(gimp-edit-clear dest-drawable)
(gimp-selection-none dest-image)
(gimp-selection-all source-image)
(gimp-edit-copy source-drawable)
(let ((floating-sel (car (gimp-edit-paste dest-drawable FALSE))))
(gimp-floating-sel-anchor floating-sel)))
(define (script-fu-carve-it mask-img mask-drawable bg-layer carve-white)
(let* ((width (car (gimp-drawable-width mask-drawable)))
(height (car (gimp-drawable-height mask-drawable)))
(type (car (gimp-drawable-type bg-layer)))
(img (car (gimp-image-new width height (cond ((= type RGB_IMAGE) RGB)
((= type RGBA_IMAGE) RGB)
((= type GRAY_IMAGE) GRAY)
((= type GRAYA_IMAGE) GRAY)
((= type INDEXED_IMAGE) INDEXED)
((= type INDEXEDA_IMAGE) INDEXED)))))
(size (min width height))
(offx (carve-scale size 0.33))
(offy (carve-scale size 0.25))
(feather (carve-scale size 0.3))
(brush-size (carve-scale size 0.3))
(mask-fs 0)
(mask (car (gimp-channel-new img width height "Engraving Mask" 50 '(0 0 0))))
(inset-gamma (calculate-inset-gamma (car (gimp-drawable-image bg-layer)) bg-layer))
(mask-fat 0)
(mask-emboss 0)
(mask-highlight 0)
(mask-shadow 0)
(shadow-layer 0)
(highlight-layer 0)
(cast-shadow-layer 0)
(csl-mask 0)
(inset-layer 0)
(il-mask 0)
(bg-width (car (gimp-drawable-width bg-layer)))
(bg-height (car (gimp-drawable-height bg-layer)))
(bg-type (car (gimp-drawable-type bg-layer)))
(bg-image (car (gimp-drawable-image bg-layer)))
(layer1 (car (gimp-layer-new img bg-width bg-height bg-type "Layer1" 100 NORMAL)))
(inset-layer (car (gimp-layer-new img bg-width bg-height bg-type "inset1" 100 NORMAL)))
(old-fg (car (gimp-palette-get-foreground)))
(old-bg (car (gimp-palette-get-background)))
(old-brush (car (gimp-brushes-get-brush))))
(gimp-image-undo-disable img)
(gimp-selection-all img)
(gimp-edit-clear inset-layer)
(gimp-edit-clear layer1)
(gimp-selection-none img)
(copy-layer-carve-it img layer1 bg-image bg-layer)
(gimp-edit-clear inset-layer)
(gimp-edit-copy mask-drawable)
(gimp-image-add-channel img mask 0)
(gimp-image-add-layer img layer1 0)
(plug-in-tile 1 img layer1 width height FALSE)
(set! mask-fs (car (gimp-edit-paste mask FALSE)))
(gimp-floating-sel-anchor mask-fs)
(if (= carve-white FALSE)
(gimp-invert mask))
(set! mask-fat (car (gimp-channel-copy mask)))
(gimp-image-add-channel img mask-fat 0)
(gimp-selection-load mask-fat)
(gimp-brushes-set-brush (carve-brush brush-size))
(gimp-palette-set-foreground '(255 255 255))
(gimp-edit-stroke mask-fat)
(gimp-selection-none img)
(set! mask-emboss (car (gimp-channel-copy mask-fat)))
(gimp-image-add-channel img mask-emboss 0)
(plug-in-gauss-rle 1 img mask-emboss feather TRUE TRUE)
(plug-in-emboss 1 img mask-emboss 315.0 45.0 7 TRUE)
(gimp-palette-set-background '(180 180 180))
(gimp-selection-load mask-fat)
(gimp-selection-invert img)
(gimp-edit-fill mask-emboss BG-IMAGE-FILL)
(gimp-selection-load mask)
(gimp-edit-fill mask-emboss BG-IMAGE-FILL)
(gimp-selection-none img)
(set! mask-highlight (car (gimp-channel-copy mask-emboss)))
(gimp-image-add-channel img mask-highlight 0)
(gimp-levels mask-highlight 0 180 255 1.0 0 255)
(set! mask-shadow mask-emboss)
(gimp-levels mask-shadow 0 0 180 1.0 0 255)
(gimp-edit-copy mask-shadow)
(set! shadow-layer (car (gimp-edit-paste layer1 FALSE)))
(gimp-floating-sel-to-layer shadow-layer)
(gimp-layer-set-mode shadow-layer MULTIPLY)
(gimp-edit-copy mask-highlight)
(set! highlight-layer (car (gimp-edit-paste shadow-layer FALSE)))
(gimp-floating-sel-to-layer highlight-layer)
(gimp-layer-set-mode highlight-layer SCREEN)
(gimp-edit-copy mask)
(set! cast-shadow-layer (car (gimp-edit-paste highlight-layer FALSE)))
(gimp-floating-sel-to-layer cast-shadow-layer)
(gimp-layer-set-mode cast-shadow-layer MULTIPLY)
(gimp-layer-set-opacity cast-shadow-layer 75)
(plug-in-gauss-rle 1 img cast-shadow-layer feather TRUE TRUE)
(gimp-layer-translate cast-shadow-layer offx offy)
(set! csl-mask (car (gimp-layer-create-mask cast-shadow-layer BLACK-MASK)))
(gimp-image-add-layer-mask img cast-shadow-layer csl-mask)
(gimp-selection-load mask)
(gimp-palette-set-background '(255 255 255))
(gimp-edit-fill csl-mask BG-IMAGE-FILL)
(set! inset-layer (car (gimp-layer-copy layer1 TRUE)))
(gimp-image-add-layer img inset-layer 1)
(set! il-mask (car (gimp-layer-create-mask inset-layer BLACK-MASK)))
(gimp-image-add-layer-mask img inset-layer il-mask)
(gimp-selection-load mask)
(gimp-palette-set-background '(255 255 255))
(gimp-edit-fill il-mask BG-IMAGE-FILL)
(gimp-selection-none img)
(gimp-selection-none bg-image)
(gimp-levels inset-layer 0 0 255 inset-gamma 0 255)
(gimp-image-remove-channel img mask)
(gimp-image-remove-channel img mask-fat)
(gimp-image-remove-channel img mask-highlight)
(gimp-image-remove-channel img mask-shadow)
(gimp-layer-set-name layer1 "Carved Surface")
(gimp-layer-set-name shadow-layer "Bevel Shadow")
(gimp-layer-set-name highlight-layer "Bevel Highlight")
(gimp-layer-set-name cast-shadow-layer "Cast Shadow")
(gimp-layer-set-name inset-layer "Inset")
(gimp-palette-set-foreground old-fg)
(gimp-palette-set-background old-bg)
(gimp-brushes-set-brush old-brush)
(gimp-display-new img)
(gimp-image-undo-enable img)))
(script-fu-register "script-fu-carve-it"
_"<Image>/Script-Fu/Stencil Ops/C_arve-It..."
"Use the specified [GRAY] drawable as a stencil to carve from the specified image. The specified image must be either RGB colour or grayscale, not indexed."
"Spencer Kimball"
"Spencer Kimball"
"1997"
"GRAY"
SF-IMAGE "Mask Image" 0
SF-DRAWABLE "Mask Drawable" 0
SF-DRAWABLE _"Image to Carve" 0
SF-TOGGLE _"Carve White Areas" TRUE)