Will mal hier zwei Scripte vorstellen, mit denen ich schöne Rahmen um eine x-beliebige geometrische Figur legen kann.
Bei dem Beispiel wurden zwei Bilderschnipsel beliebig auf der Leinwand angeordnet und dann der Script aufgerufen.
Die Scripte arbeiten auf der Basis der
Alpha-Layer. Das heißt, man muss das Bild schon so zurechtschneiden, daß es die Umrisse für den Rahmen bildet.
Das Bild soll anzeigen, wie ich im Groben vorgehe,
ich hoffe, es gibt dazu keine weiteren Fragen...
Und nun der Code:
Code:
(script-fu-register "script-fu-Frame2"
_"<Image>/Script-Fu/Decor/Skunk Frame"
"Erstellt einen Rahmen aus verschiedenen Parametern"
"Mathias Weitz"
"Mathias Weitz"
"03/06/03"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"FrameSize" '(100 4 1000 10 10 0 0)
SF-ADJUSTMENT _"InnerSizeRatio" '(2 1 8 0.1 0.1 1 0)
SF-ADJUSTMENT _"InnerSqueak" '(1 1 127 1 1 0 0)
SF-ADJUSTMENT _"Cube\n<10 = off" '(0 0 50 1 1 0 0)
SF-ADJUSTMENT _"CubeSize" '(2 1 3 0.1 0.1 1 0)
SF-ADJUSTMENT _"Noise" '(0.9 0.1 1 0.1 0.1 1 0)
SF-TOGGLE _"Noise Color" FALSE
SF-ADJUSTMENT _"Blur" '(5 1 10 1 1 1 0)
SF-ADJUSTMENT _"Bumpiness" '(15 1 80 1 1 1 0)
SF-ADJUSTMENT _"FrameShadow" '(50 1 200 1 1 1 0)
)
(define (script-fu-Frame2 inImage inLayer frame isize inner cube cubeSize noise noisecolor blur bump soft)
(gimp-image-undo-group-start inImage)
(gimp-image-undo-disable inImage)
(set! theWidth (car (gimp-image-width inImage)))
(set! theHeight (car (gimp-image-height inImage)))
(set! fframe (* frame isize))
(set! noisec 0)
(if (= noisecolor TRUE) (set! noisec 1))
(set! frameLayer (car (gimp-layer-new inImage theWidth theHeight 0 "Frame" 100 0)))
(gimp-layer-add-alpha frameLayer)
(gimp-image-add-layer inImage frameLayer -1)
(gimp-drawable-fill frameLayer 3)
(set! mask-original (car (gimp-layer-create-mask inLayer 2)))
(set! mask1 (car (gimp-channel-copy mask-original)))
; Mask 1
(set! mask2 (car (gimp-channel-copy mask1)))
(plug-in-gauss-rle2 1 inImage mask1 frame frame)
(gimp-levels mask1 0 0 15 1 0 255)
(gimp-channel-combine-masks mask1 mask2 1 0 0)
(gimp-threshold mask1 1 255)
; Mask 2
(gimp-channel-combine-masks mask2 mask1 0 0 0)
(set! mask3 (car (gimp-channel-copy mask2)))
(plug-in-gauss-rle2 1 inImage mask2 fframe fframe)
(gimp-channel-combine-masks mask2 mask3 1 0 0)
(gimp-threshold mask2 inner 255)
; Mask 3
(gimp-channel-combine-masks mask3 mask2 0 0 0)
(set! mask4 (car (gimp-channel-copy mask3)))
(plug-in-gauss-rle2 1 inImage mask3 frame frame)
(gimp-channel-combine-masks mask3 mask4 1 0 0)
(gimp-threshold mask3 1 255)
; Maske 4 := 1 + 2 + 3
(gimp-channel-combine-masks mask4 mask3 0 0 0)
(gimp-channel-combine-masks mask4 mask-original 1 0 0)
; make the Frame
(gimp-image-set-component-active inImage 0 TRUE)
(gimp-image-set-component-active inImage 1 TRUE)
(gimp-image-set-component-active inImage 2 TRUE)
;(gimp-image-set-component-active inImage 3 TRUE)
(set! mask5 (car (gimp-channel-copy mask4)))
(plug-in-gauss-rle2 1 inImage mask5 soft soft)
(gimp-levels mask5 0 0 127 1 0 255)
(gimp-selection-load mask5)
(gimp-palette-set-foreground '(0 0 0))
(gimp-edit-fill frameLayer 0)
(gimp-selection-load mask1)
(gimp-palette-set-foreground '(0 0 0))
(gimp-edit-fill frameLayer 0)
(plug-in-noisify 1 inImage frameLayer 0 noise noise noise 0)
(gimp-selection-load mask2)
(gimp-palette-set-foreground '(255 255 255))
(gimp-edit-fill frameLayer 0)
(plug-in-noisify 1 inImage frameLayer noisec noise noise noise 0)
(if (< 9 cube) (plug-in-cubism 1 inImage frameLayer cube cubeSize 0))
(gimp-selection-load mask3)
(gimp-palette-set-foreground '(0 0 0))
(gimp-edit-fill frameLayer 0)
(plug-in-noisify 1 inImage frameLayer 0 noise noise noise 0)
(gimp-selection-all inImage)
(plug-in-gauss-rle2 1 inImage frameLayer blur blur)
(plug-in-bump-map 1 inImage frameLayer frameLayer 135 45 bump 0 0 0 0 1 0 0)
(gimp-image-remove-channel inImage mask-original)
(gimp-drawable-delete mask-original)
(gimp-image-remove-channel inImage mask1)
(gimp-drawable-delete mask1)
(gimp-image-remove-channel inImage mask2)
(gimp-drawable-delete mask2)
(gimp-image-remove-channel inImage mask3)
(gimp-drawable-delete mask3)
(gimp-image-remove-channel inImage mask4)
(gimp-drawable-delete mask4)
(gimp-image-remove-channel inImage mask5)
(gimp-drawable-delete mask5)
(gimp-image-set-active-layer inImage inLayer)
(gimp-selection-all inImage)
(gimp-displays-flush)
(gimp-image-undo-enable inImage)
(gimp-image-undo-group-end inImage)
)
;***************************************************
(script-fu-register "script-fu-Frame3"
_"<Image>/Script-Fu/Decor/Snake Frame"
"Erstellt einen Rahmen aus verschiedenen Parametern"
"Mathias Weitz"
"Mathias Weitz"
"03/06/03"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"Frame Size" '(100 4 1000 10 10 0 0)
SF-ADJUSTMENT _"Frame Innersize Ratio" '(2 1 15 0.1 0.1 1 0)
SF-ADJUSTMENT _"Frame InnerSqueak" '(1 1 127 1 1 0 0)
SF-ADJUSTMENT _"Frame Render Turbulence" '(1 0.1 5 0.1 0.1 1 0)
SF-ADJUSTMENT _"Frame Outer Darkness" '(192 32 255 1 1 0 0)
SF-ADJUSTMENT _"Frame Soft" '(10 1 500 1 1 0 0)
SF-ADJUSTMENT _"Mosaic Size" '(25 5 50 1 1 0 0)
SF-ADJUSTMENT _"Mosaic Tile Neatness" '(1 0 1 0.1 0.1 1 0)
SF-ADJUSTMENT _"Mosaic Tile Spacing" '(0 0 5 1 1 0 0)
SF-ADJUSTMENT _"Mosaic Tile Height" '(0 0 15 1 1 0 0)
SF-ADJUSTMENT _"Mosaic Color Variation" '(0 0 1 0.1 0.1 1 0)
SF-TOGGLE _"Mosaic Rough" FALSE
SF-TOGGLE _"Mosaic Hexagon" TRUE
SF-ADJUSTMENT _"Light Effect" '(100 0 100 1 1 0 0)
SF-ADJUSTMENT _"Light Soft" '(100 10 500 10 10 0 0)
SF-ADJUSTMENT _"Shadow Soft" '(50 1 200 10 10 0 0)
SF-ADJUSTMENT _"intern Random-Seed" '(119 1 1001 1 1 0 0)
)
(define (script-fu-Frame3 inImage inLayer frame isize inner render sideDark frameSoft mosaicSize mosaicNeat mosaicSpacing mosaicHeight mosaicColorVar mosaicRough mosaicGeometry lightEffect lightSoft shadowSoft iRandom)
(gimp-image-undo-group-start inImage)
(gimp-image-undo-disable inImage)
(set! theWidth (car (gimp-image-width inImage)))
(set! theHeight (car (gimp-image-height inImage)))
(set! fframe (* frame isize))
(set! smooth 0)
(if (= mosaicRough TRUE) (set! smooth 1))
(set! geometry 0)
(if (= mosaicGeometry TRUE) (set! geometry 1))
(set! frameLayer (car (gimp-layer-new inImage theWidth theHeight 0 "Frame" 100 0)))
(gimp-layer-add-alpha frameLayer)
(gimp-image-add-layer inImage frameLayer -1)
(gimp-drawable-fill frameLayer 3)
(set! lightLayer (car (gimp-layer-new inImage theWidth theHeight 0 "Light" lightEffect 5)))
(gimp-layer-add-alpha lightLayer)
(gimp-image-add-layer inImage lightLayer -1)
(gimp-drawable-fill lightLayer 3)
(set! mask-original (car (gimp-layer-create-mask inLayer 2)))
(set! mask1 (car (gimp-channel-copy mask-original)))
; Mask 1
(set! mask2 (car (gimp-channel-copy mask1)))
(plug-in-gauss-rle2 1 inImage mask1 frame frame)
(gimp-levels mask1 0 0 15 1 0 255)
(gimp-channel-combine-masks mask1 mask2 1 0 0)
(gimp-threshold mask1 1 255)
; Mask 2
(gimp-channel-combine-masks mask2 mask1 0 0 0)
(set! mask3 (car (gimp-channel-copy mask2)))
(plug-in-gauss-rle2 1 inImage mask2 fframe fframe)
(gimp-channel-combine-masks mask2 mask3 1 0 0)
(gimp-threshold mask2 inner 255)
; Mask 3
(gimp-channel-combine-masks mask3 mask2 0 0 0)
(set! mask4 (car (gimp-channel-copy mask3)))
(plug-in-gauss-rle2 1 inImage mask3 frame frame)
(gimp-channel-combine-masks mask3 mask4 1 0 0)
(gimp-threshold mask3 1 255)
; Maske 4 := 1 + 2 + 3
(gimp-channel-combine-masks mask4 mask3 0 0 0)
(gimp-channel-combine-masks mask4 mask-original 1 0 0)
; make the Frame
(gimp-image-set-component-active inImage 0 TRUE)
(gimp-image-set-component-active inImage 1 TRUE)
(gimp-image-set-component-active inImage 2 TRUE)
;(gimp-image-set-component-active inImage 3 TRUE)
; Maske 5 := Maske 4 soft
; Schatten
(set! mask5 (car (gimp-channel-copy mask4)))
(plug-in-gauss-rle2 1 inImage mask5 shadowSoft shadowSoft)
(gimp-levels mask5 0 0 127 1 0 255)
(gimp-selection-load mask5)
(gimp-palette-set-foreground '(0 0 0))
(gimp-edit-fill frameLayer 0)
; Maske 4 anwenden - Plasma
(gimp-selection-load mask4)
(plug-in-plasma 1 inImage frameLayer iRandom render)
(gimp-palette-set-foreground '(255 255 255))
(gimp-edit-fill lightLayer 0)
; Maske 1 += Maske 3
(gimp-channel-combine-masks mask1 mask3 0 0 0)
(gimp-selection-load mask1)
;(gimp-hue-saturation frameLayer 0 180 0 0)
(gimp-levels frameLayer 0 0 255 1 0 sideDark)
(gimp-palette-set-foreground '(0 0 0))
(gimp-edit-fill lightLayer 0)
; Maske 4 anwenden - Mosaic
(gimp-selection-load mask4)
(plug-in-gauss-rle2 1 inImage frameLayer frameSoft frameSoft)
(plug-in-mosaic 1 inImage frameLayer mosaicSize mosaicHeight mosaicSpacing mosaicNeat FALSE 135 mosaicColorVar TRUE TRUE geometry smooth 0)
(plug-in-gauss-rle2 1 inImage lightLayer lightSoft lightSoft)
(plug-in-c-astretch 1 inImage lightLayer)
;(gimp-selection-load mask2)
;(gimp-palette-set-foreground '(0 255 255))
;(gimp-edit-fill frameLayer 0)
;(gimp-selection-load mask3)
;(gimp-palette-set-foreground '(255 0 255))
;(gimp-edit-fill frameLayer 0)
(gimp-selection-all inImage)
(gimp-image-remove-channel inImage mask-original)
(gimp-drawable-delete mask-original)
(gimp-image-remove-channel inImage mask1)
(gimp-drawable-delete mask1)
(gimp-image-remove-channel inImage mask2)
(gimp-drawable-delete mask2)
(gimp-image-remove-channel inImage mask3)
(gimp-drawable-delete mask3)
(gimp-image-remove-channel inImage mask4)
(gimp-drawable-delete mask4)
(gimp-image-remove-channel inImage mask5)
(gimp-drawable-delete mask5)
(set! frameLayer (car (gimp-image-merge-down inImage lightLayer 0)))
(gimp-image-set-active-layer inImage inLayer)
(gimp-selection-all inImage)
(gimp-displays-flush)
(gimp-image-undo-enable inImage)
(gimp-image-undo-group-end inImage)
)