File: starscape-logo.scm

package info (click to toggle)
gimp 2.2.13-1etch4
  • links: PTS
  • area: main
  • in suites: etch
  • size: 94,832 kB
  • ctags: 47,113
  • sloc: ansic: 524,858; xml: 36,798; lisp: 9,870; sh: 9,409; makefile: 7,923; python: 2,674; perl: 2,589; yacc: 520; lex: 334
file content (167 lines) | stat: -rw-r--r-- 5,743 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
;  Nova Starscape
;  Create a text effect that simulates an eerie alien glow around text

(define (find-blend-coords w
			   h)
  (let* ((denom (+ (/ w h) (/ h w)))
	 (bx    (/ (* -2 h) denom))
	 (by    (/ (* -2 w) denom)))
    (cons bx by)))

(define (find-nova-x-coord drawable
			   x1
			   x2
			   y)
  (let* ((x 0)
	 (alpha 3)
	 (range (- x2 x1))
	 (min-clearance 5)
	 (val '())
	 (val-left '())
	 (val-right '())
	 (val-top '())
	 (val-bottom '())
	 (limit 100)
	 (clearance 0))
    (while (and (= clearance 0) (> limit 0))
	   (set! x (+ (rand range) x1))
	   (set! val (cadr (gimp-drawable-get-pixel drawable x y)))
	   (set! val-left (cadr (gimp-drawable-get-pixel drawable (- x min-clearance) y)))
	   (set! val-right (cadr (gimp-drawable-get-pixel drawable (+ x min-clearance) y)))
	   (set! val-top (cadr (gimp-drawable-get-pixel drawable x (- y min-clearance))))
	   (set! val-bottom (cadr (gimp-drawable-get-pixel drawable x (+ y min-clearance))))
	   (if (and (= (aref val alpha) 0) (= (aref val-left alpha) 0) (= (aref val-right alpha) 0)
		    (= (aref val-top alpha) 0) (= (aref val-bottom alpha) 0))
	       (set! clearance 1) (set! limit (- limit 1))))
    x))

(define (apply-starscape-logo-effect img
				     logo-layer
				     size
				     glow-color)
  (let* ((border (/ size 4))
	 (grow (/ size 30))
	 (offx (* size 0.03))
	 (offy (* size 0.02))
	 (feather (/ size 4))
	 (shadow-feather (/ size 25))
	 (width (car (gimp-drawable-width logo-layer)))
	 (height (car (gimp-drawable-height logo-layer)))
	 (w (* (/ (- width (* border 2)) 2.0) 0.75))
	 (h (* (/ (- height (* border 2)) 2.0) 0.75))
	 (novay (* height 0.3))
	 (novax (find-nova-x-coord logo-layer (* width 0.2) (* width 0.8) novay))
	 (novaradius (/ (min height width) 7.0))
	 (cx (/ width 2.0))
	 (cy (/ height 2.0))
	 (bx (+ cx (car (find-blend-coords w h))))
	 (by (+ cy (cdr (find-blend-coords w h))))
	 (bg-layer (car (gimp-layer-new img width height RGB-IMAGE "Background" 100 NORMAL-MODE)))
	 (glow-layer (car (gimp-layer-new img width height RGBA-IMAGE "Glow" 100 NORMAL-MODE)))
	 (shadow-layer (car (gimp-layer-new img width height RGBA-IMAGE "Drop Shadow" 100 NORMAL-MODE)))
	 (bump-channel (car (gimp-channel-new img width height "Bump Map" 50 '(0 0 0)))))

    (gimp-context-push)

    (gimp-selection-none img)
    (script-fu-util-image-resize-from-layer img logo-layer)
    (gimp-image-add-layer img bg-layer 1)
    (gimp-image-add-layer img glow-layer 1)
    (gimp-image-add-layer img shadow-layer 1)
    (gimp-image-add-channel img bump-channel 0)
    (gimp-layer-set-preserve-trans logo-layer TRUE)

    (gimp-context-set-background '(0 0 0))
    (gimp-edit-fill bg-layer BACKGROUND-FILL)
    (gimp-edit-clear shadow-layer)
    (gimp-edit-clear glow-layer)

    (gimp-selection-layer-alpha logo-layer)
    (gimp-selection-grow img grow)
    (gimp-selection-feather img feather)
    (gimp-context-set-background glow-color)
    (gimp-selection-feather img feather)
    (gimp-edit-fill glow-layer BACKGROUND-FILL)

    (gimp-selection-layer-alpha logo-layer)
    (gimp-selection-feather img shadow-feather)
    (gimp-context-set-background '(0 0 0))
    (gimp-selection-translate img offx offy)
    (gimp-edit-fill shadow-layer BACKGROUND-FILL)

    (gimp-selection-none img)
    (gimp-context-set-background '(31 31 31))
    (gimp-context-set-foreground '(255 255 255))

    (gimp-edit-blend logo-layer FG-BG-RGB-MODE NORMAL-MODE
		     GRADIENT-BILINEAR 100 0 REPEAT-NONE FALSE
		     FALSE 0 0 TRUE
		     cx cy bx by)

    (plug-in-nova 1 img glow-layer novax novay glow-color novaradius 100 0)

    (gimp-selection-all img)
    (gimp-context-set-pattern "Stone")
    (gimp-edit-bucket-fill bump-channel PATTERN-BUCKET-FILL NORMAL-MODE 100 0 FALSE 0 0)
    (plug-in-bump-map 1 img logo-layer bump-channel
		      135.0 45.0 4 0 0 0 0 FALSE FALSE 0)
    (gimp-image-remove-channel img bump-channel)
    (gimp-selection-none img)

    (gimp-context-pop)))


(define (script-fu-starscape-logo-alpha img
					logo-layer
					size
					glow-color)
  (begin
    (gimp-image-undo-group-start img)
    (apply-starscape-logo-effect img logo-layer size glow-color)
    (gimp-image-undo-group-end img)
    (gimp-displays-flush)))

(script-fu-register "script-fu-starscape-logo-alpha"
		    _"Sta_rscape..."
		    "Starscape using the Nova plug-in"
		    "Spencer Kimball"
		    "Spencer Kimball"
		    "1997"
		    "RGBA"
                    SF-IMAGE      "Image"                     0
                    SF-DRAWABLE   "Drawable"                  0
		    SF-ADJUSTMENT _"Effect size (pixels * 4)" '(150 1 1000 1 10 0 1)
		    SF-COLOR      _"Glow color"               '(28 65 188))

(script-fu-menu-register "script-fu-starscape-logo-alpha"
			 _"<Image>/Script-Fu/Alpha to Logo")


(define (script-fu-starscape-logo text
				  size
				  fontname
				  glow-color)
  (let* ((img (car (gimp-image-new 256 256 RGB)))
	 (border (/ size 4))
	 (text-layer (car (gimp-text-fontname img -1 0 0 text border
					      TRUE size PIXELS fontname))))
    (gimp-image-undo-disable img)
    (gimp-drawable-set-name text-layer text)
    (apply-starscape-logo-effect img text-layer size glow-color)
    (gimp-image-undo-enable img)
    (gimp-display-new img)))

(script-fu-register "script-fu-starscape-logo"
		    _"Sta_rscape..."
		    "Starscape using the Nova plug-in"
		    "Spencer Kimball"
		    "Spencer Kimball"
		    "1997"
		    ""
		    SF-STRING     _"Text"               "Nova"
		    SF-ADJUSTMENT _"Font size (pixels)" '(150 1 1000 1 10 0 1)
		    SF-FONT       _"Font"               "Engraver"
		    SF-COLOR      _"Glow color"         '(28 65 188))

(script-fu-menu-register "script-fu-starscape-logo"
			 _"<Toolbox>/Xtns/Script-Fu/Logos")