14
14
(define (script-fu-burn-in-anim org-img
26
;--- main variable: "bl-x" runs from 0 to layer-width
26
;--- main variable: "bl-x" runs from 0 to layer-width
31
(set! speed (* -1 speed)) )
49
(set! speed (* -1 speed)) )
33
51
;--- check image and work on a copy
34
(if (= (car (gimp-image-get-layers org-img)) 2)
52
(if (and (= (car (gimp-image-get-layers org-img)) 2)
53
(= (car (gimp-image-get-floating-sel org-img)) -1))
36
55
;--- main program structure starts here, begin of "if-1"
40
(set! img (car (gimp-image-duplicate org-img)))
41
(gimp-image-undo-disable img)
42
(if (> (car (gimp-drawable-type org-layer)) 1 )
43
(gimp-image-convert-rgb img))
44
(set! source-layer (aref (cadr (gimp-image-get-layers img)) 0 ))
45
(set! bg-source-layer (aref (cadr (gimp-image-get-layers img)) 1 ))
46
(set! source-layer-width (car (gimp-drawable-width source-layer)))
59
(set! img (car (gimp-image-duplicate org-img)))
60
(gimp-image-undo-disable img)
61
(if (> (car (gimp-drawable-type org-layer)) 1 )
62
(gimp-image-convert-rgb img))
63
(set! source-layer (aref (cadr (gimp-image-get-layers img)) 0 ))
64
(set! bg-source-layer (aref (cadr (gimp-image-get-layers img)) 1 ))
65
(set! source-layer-width (car (gimp-drawable-width source-layer)))
48
67
;--- hide layers, cause we want to "merge visible layers" later
49
(gimp-drawable-set-visible source-layer FALSE)
50
(gimp-drawable-set-visible bg-source-layer FALSE)
68
(gimp-drawable-set-visible source-layer FALSE)
69
(gimp-drawable-set-visible bg-source-layer FALSE)
52
71
;--- process image horizontal with pixel-speed
53
(while (< bl-x (+ source-layer-width bl-width))
54
(set! bl-layer (car (gimp-layer-copy source-layer TRUE)))
55
(set! bl-layer-name (string-append "fr-nr"
56
(number->string frame-nr 10) ) )
58
(gimp-image-add-layer img bl-layer -2)
59
(gimp-drawable-set-name bl-layer bl-layer-name)
60
(gimp-drawable-set-visible bl-layer TRUE)
61
(gimp-layer-set-preserve-trans bl-layer TRUE)
62
(gimp-layer-add-alpha bl-layer)
64
;--- add an alpha mask for blending and select it
65
(gimp-selection-layer-alpha bl-layer)
66
(set! bl-mask (car (gimp-layer-create-mask bl-layer ADD-BLACK-MASK)))
67
(gimp-layer-add-mask bl-layer bl-mask)
69
;--- handle layer geometry
70
(set! bl-layer-width source-layer-width)
71
(set! bl-height (car (gimp-drawable-height bl-layer)))
72
(set! bl-x-off (- bl-x bl-width))
73
(set! bl-x-off (+ bl-x-off (car (gimp-drawable-offsets bl-layer))))
74
(set! bl-y-off (cadr (gimp-drawable-offsets bl-layer)))
76
;--- select a rectangular area to blend
77
(gimp-rect-select img bl-x-off bl-y-off bl-width bl-height CHANNEL-OP-REPLACE 0 0)
78
;--- select at least 1 pixel!
79
(gimp-rect-select img bl-x-off bl-y-off (+ bl-width 1) bl-height CHANNEL-OP-ADD 0 0)
83
(set! nofadeout-bl-x-off (car (gimp-drawable-offsets bl-layer)))
84
(set! nofadeout-bl-width (+ nofadeout-bl-x-off bl-x))
85
(set! nofadeout-bl-width (max nofadeout-bl-width 1))
86
(gimp-rect-select img nofadeout-bl-x-off bl-y-off
87
nofadeout-bl-width bl-height
88
CHANNEL-OP-REPLACE 0 0)))
90
;--- alpha blending text to trans (fadeout)
91
(gimp-context-set-foreground '(255 255 255))
92
(gimp-context-set-background '( 0 0 0))
95
; blend with 20% offset to get less transparency in the front
96
(gimp-edit-blend bl-mask FG-BG-RGB-MODE NORMAL-MODE
97
GRADIENT-LINEAR 100 20 REPEAT-NONE FALSE
99
(+ bl-x-off bl-width) 0 bl-x-off 0)))
101
(if (= fadeout FALSE)
103
(gimp-context-set-foreground '(255 255 255))
104
(gimp-edit-bucket-fill bl-mask FG-BUCKET-FILL NORMAL-MODE
107
(gimp-layer-remove-mask bl-layer MASK-APPLY)
109
;--- add bright glow in front
110
(if (= show-glow TRUE)
112
;--- add some brightness to whole text
114
(gimp-brightness-contrast bl-layer 100 0))
116
;--- blend glow color inside the letters
117
(gimp-context-set-foreground glow-color)
118
(gimp-edit-blend bl-layer FG-TRANSPARENT-MODE NORMAL-MODE
119
GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE
121
(+ bl-x-off bl-width) 0
122
(- (+ bl-x-off bl-width) after-glow) 0)
124
;--- add corona effect
125
(gimp-selection-layer-alpha bl-layer)
126
(gimp-selection-sharpen img)
127
(gimp-selection-grow img corona-width)
128
(gimp-layer-set-preserve-trans bl-layer FALSE)
129
(gimp-selection-feather img corona-width)
130
(gimp-context-set-foreground glow-color)
131
(gimp-edit-blend bl-layer FG-TRANSPARENT-MODE NORMAL-MODE
132
GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE
134
(- (+ bl-x-off bl-width) corona-width) 0
135
(- (+ bl-x-off bl-width) after-glow) 0))
138
;--- merge with bg layer
139
(set! bg-layer (car (gimp-layer-copy bg-source-layer FALSE)))
140
(gimp-image-add-layer img bg-layer -1)
141
(gimp-image-lower-layer img bg-layer)
142
(set! bg-layer-name (string-append "bg-"
143
(number->string frame-nr 10)))
144
(gimp-drawable-set-name bg-layer bg-layer-name)
145
(gimp-drawable-set-visible bg-layer TRUE)
146
(set! blended-layer (car (gimp-image-merge-visible-layers img
148
;(set! blended-layer bl-layer)
149
(gimp-drawable-set-visible blended-layer FALSE)
151
;--- end of "while" loop
152
(set! frame-nr (+ frame-nr 1))
153
(set! bl-x (+ bl-x speed)))
155
;--- finalize the job
156
(gimp-selection-none img)
157
(gimp-image-remove-layer img source-layer)
158
(gimp-image-remove-layer img bg-source-layer)
160
(gimp-image-set-filename img "burn-in")
162
(if (= optimize TRUE)
164
(gimp-image-convert-indexed img 1 WEB-PALETTE 250 FALSE TRUE "")
165
(set! img-out (car (plug-in-animationoptimize 0
169
(gimp-drawable-set-visible (aref (cadr (gimp-image-get-layers img)) 0)
171
(gimp-image-undo-enable img)
172
(gimp-image-clean-all img)
173
(set! img-display (car (gimp-display-new img)))
175
(gimp-displays-flush)
179
;--- false form of "if-1"
180
(gimp-message _"Burn-In: Need two layers in total!"
181
"A foreground text layer with transparency"
182
"and a background layer."))))
72
(while (< bl-x (+ source-layer-width bl-width))
73
(set! bl-layer (car (gimp-layer-copy source-layer TRUE)))
74
(set! bl-layer-name (string-append "fr-nr"
75
(number->string frame-nr 10) ) )
77
(gimp-image-add-layer img bl-layer -2)
78
(gimp-drawable-set-name bl-layer bl-layer-name)
79
(gimp-drawable-set-visible bl-layer TRUE)
80
(gimp-layer-set-lock-alpha bl-layer TRUE)
81
(gimp-layer-add-alpha bl-layer)
83
;--- add an alpha mask for blending and select it
84
(gimp-selection-layer-alpha bl-layer)
85
(set! bl-mask (car (gimp-layer-create-mask bl-layer ADD-BLACK-MASK)))
86
(gimp-layer-add-mask bl-layer bl-mask)
88
;--- handle layer geometry
89
(set! bl-layer-width source-layer-width)
90
(set! bl-height (car (gimp-drawable-height bl-layer)))
91
(set! bl-x-off (- bl-x bl-width))
92
(set! bl-x-off (+ bl-x-off (car (gimp-drawable-offsets bl-layer))))
93
(set! bl-y-off (cadr (gimp-drawable-offsets bl-layer)))
95
;--- select a rectangular area to blend
96
(gimp-rect-select img bl-x-off bl-y-off bl-width bl-height CHANNEL-OP-REPLACE 0 0)
97
;--- select at least 1 pixel!
98
(gimp-rect-select img bl-x-off bl-y-off (+ bl-width 1) bl-height CHANNEL-OP-ADD 0 0)
100
(if (= fadeout FALSE)
102
(set! nofadeout-bl-x-off (car (gimp-drawable-offsets bl-layer)))
103
(set! nofadeout-bl-width (+ nofadeout-bl-x-off bl-x))
104
(set! nofadeout-bl-width (max nofadeout-bl-width 1))
105
(gimp-rect-select img nofadeout-bl-x-off bl-y-off
106
nofadeout-bl-width bl-height
107
CHANNEL-OP-REPLACE 0 0)
111
;--- alpha blending text to trans (fadeout)
112
(gimp-context-set-foreground '(255 255 255))
113
(gimp-context-set-background '( 0 0 0))
116
; blend with 20% offset to get less transparency in the front
117
(gimp-edit-blend bl-mask FG-BG-RGB-MODE NORMAL-MODE
118
GRADIENT-LINEAR 100 20 REPEAT-NONE FALSE
120
(+ bl-x-off bl-width) 0 bl-x-off 0)
124
(if (= fadeout FALSE)
126
(gimp-context-set-foreground '(255 255 255))
127
(gimp-edit-bucket-fill bl-mask FG-BUCKET-FILL NORMAL-MODE
132
(gimp-layer-remove-mask bl-layer MASK-APPLY)
134
;--- add bright glow in front
135
(if (= show-glow TRUE)
137
;--- add some brightness to whole text
139
(gimp-brightness-contrast bl-layer 100 0)
142
;--- blend glow color inside the letters
143
(gimp-context-set-foreground glow-color)
144
(gimp-edit-blend bl-layer FG-TRANSPARENT-MODE NORMAL-MODE
145
GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE
147
(+ bl-x-off bl-width) 0
148
(- (+ bl-x-off bl-width) after-glow) 0)
150
;--- add corona effect
151
(gimp-selection-layer-alpha bl-layer)
152
(gimp-selection-sharpen img)
153
(gimp-selection-grow img corona-width)
154
(gimp-layer-set-lock-alpha bl-layer FALSE)
155
(gimp-selection-feather img corona-width)
156
(gimp-context-set-foreground glow-color)
157
(gimp-edit-blend bl-layer FG-TRANSPARENT-MODE NORMAL-MODE
158
GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE
160
(- (+ bl-x-off bl-width) corona-width) 0
161
(- (+ bl-x-off bl-width) after-glow) 0)
165
;--- merge with bg layer
166
(set! bg-layer (car (gimp-layer-copy bg-source-layer FALSE)))
167
(gimp-image-add-layer img bg-layer -1)
168
(gimp-image-lower-layer img bg-layer)
169
(set! bg-layer-name (string-append "bg-"
170
(number->string frame-nr 10)))
171
(gimp-drawable-set-name bg-layer bg-layer-name)
172
(gimp-drawable-set-visible bg-layer TRUE)
173
(set! blended-layer (car (gimp-image-merge-visible-layers img
175
;(set! blended-layer bl-layer)
176
(gimp-drawable-set-visible blended-layer FALSE)
178
;--- end of "while" loop
179
(set! frame-nr (+ frame-nr 1))
180
(set! bl-x (+ bl-x speed))
183
;--- finalize the job
184
(gimp-selection-none img)
185
(gimp-image-remove-layer img source-layer)
186
(gimp-image-remove-layer img bg-source-layer)
188
(gimp-image-set-filename img "burn-in")
190
(if (= optimize TRUE)
192
(gimp-image-convert-indexed img 1 WEB-PALETTE 250 FALSE TRUE "")
193
(set! img-out (car (plug-in-animationoptimize 0
199
(gimp-drawable-set-visible (aref (cadr (gimp-image-get-layers img)) 0)
201
(gimp-image-undo-enable img)
202
(gimp-image-clean-all img)
203
(set! img-display (car (gimp-display-new img)))
205
(gimp-displays-flush)
210
;--- false form of "if-1"
211
(gimp-message _"Burn-In: Needs two layers in total!\nA foreground text layer with transparency and a background layer.")
185
217
(script-fu-register "script-fu-burn-in-anim"
187
"Burn-in like effect on a fg (text) layer and a bg layer; V2.1"
188
"Roland Berger roland@fuchur.leute.server.de"
191
"RGBA GRAYA INDEXEDA"
192
SF-IMAGE "The image" 0
193
SF-DRAWABLE "Layer to animate" 0
194
SF-COLOR _"Glow color" '(255 255 255)
195
SF-TOGGLE _"Fadeout" FALSE
196
SF-VALUE _"Fadeout width" "100"
197
SF-VALUE _"Corona width" "7"
198
SF-VALUE _"After glow" "50"
199
SF-TOGGLE _"Add glowing" TRUE
200
SF-TOGGLE _"Prepare for GIF" FALSE
201
SF-VALUE _"Speed (pixels/frame)" "50")
219
_"Create intermediate layers to produce an animated 'burn-in' transition between two layers"
220
"Roland Berger roland@fuchur.leute.server.de"
223
"RGBA GRAYA INDEXEDA"
224
SF-IMAGE "The image" 0
225
SF-DRAWABLE "Layer to animate" 0
226
SF-COLOR _"Glow color" "white"
227
SF-TOGGLE _"Fadeout" FALSE
228
SF-VALUE _"Fadeout width" "100"
229
SF-VALUE _"Corona width" "7"
230
SF-VALUE _"After glow" "50"
231
SF-TOGGLE _"Add glowing" TRUE
232
SF-TOGGLE _"Prepare for GIF" FALSE
233
SF-VALUE _"Speed (pixels/frame)" "50"
203
236
(script-fu-menu-register "script-fu-burn-in-anim"
204
_"<Image>/Script-Fu/Animators")
237
"<Image>/Filters/Animation/Animators")