Der folgende Script soll ein Wasserzeichen auf dem Bild aufbringen.
Dabei unterscheide ich zwischen 2 Arten vom Aufbringen:
- es soll erkennbar sein, wer dieses Bild erzeugt hat (Signatur)
- das Bild soll auch ausschnittsweise unbrauchber gemacht werden für eine Reproduktion (Watermark)
Die meisten Wasserzeichen kann man sehr schwach auftragen, sie können durch selektives Schärfen relativ simpel wieder sichtbar gemacht werden.
Code:
(script-fu-register "script-fu-copyright"
_"<Image>/Script-Fu/Utils/Copyright"
"copyright"
"Mathias Weitz"
"Mathias Weitz"
"18/07/06"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-STRING _"Text" "image copyright by ..."
SF-FONT _"Font" "Arial"
SF-OPTION _"Effect" '(_"Relief (very weak)"
_"Emboss (strong)"
_"Emboss soft (weak)"
_"Screen (weak, dark Images)"
_"Difference (weak, dark and bright Images)")
SF-OPTION _"Style" '(_"All Over 4:3"
_"All Over 1:1"
_"Bottom Left")
SF-ADJUSTMENT _"Depth" '(2 1 10 1 1 0 0)
)
(define (script-fu-copyright image drawable descr font effect style depth)
;(gimp-image-undo-disable image)
(set! dimendiv 20)
(set! fsoft 1)
(set! mode 1)
(set! ddimendiv (/ (car (gimp-image-height image)) dimendiv))
(set! dimenmax (max (car (gimp-image-height image)) (car (gimp-image-width image))))
(set! fsoft (/ dimenmax 200))
(set! ffsoft (/ dimenmax 500))
(set! fontdim (gimp-text-get-extents-fontname descr (/ (car (gimp-image-height image)) dimendiv) 0 font))
(set! fontdimx (car fontdim))
(set! fontdimy (cadr fontdim))
(set! descrx 0)
(set! descry 0)
(if (= style 2)
(begin
(set! descrx (- (car (gimp-image-width image)) fontdimx))
(set! descry (- (car (gimp-image-height image)) fontdimy))
(set! descrx (- descrx ddimendiv))
))
(if (or (= style 0) (= style 1))
(begin
(set! descrx (/ (- (car (gimp-image-width image)) fontdimx) 2))
(set! descry (/ (- (car (gimp-image-height image)) fontdimy) 2))
))
(gimp-palette-set-foreground '(0 0 0))
(if (or (= style 0) (= style 1))
(begin
(set! nlayer (car (gimp-layer-new image (car (gimp-image-width image)) (car (gimp-image-height image)) 1 "nlayer" 100 0)))
(gimp-image-add-layer image nlayer 0)
(gimp-edit-fill nlayer 2)
))
(set! tlayer (car (gimp-layer-new image (car (gimp-image-width image)) (car (gimp-image-height image)) 1 "tlayer" 100 0)))
(gimp-image-add-layer image tlayer 0)
(gimp-edit-fill tlayer 2)
(set! textlayer (car (gimp-text-fontname image -1 descrx descry descr 0 TRUE ddimendiv 0 font)))
(set! work (car (gimp-image-merge-down image textlayer 0)))
(if (or (= style 0) (= style 1))
(begin
(if (= style 0)
(gimp-drawable-transform-rotate work 5.77 1 0 0 1 0 2 1 3 1)
)
(if (= style 1)
(gimp-drawable-transform-rotate work 5.65 1 0 0 1 0 2 1 3 1)
)
(set! work (car (gimp-image-merge-down image work 0)))
(set! l1 (car (gimp-layer-copy work 0)))
(gimp-image-add-layer image l1 0)
(gimp-drawable-offset l1 1 1 (/ (car (gimp-image-width image)) 3) 0)
(gimp-layer-set-mode l1 3)
(set! l2 (car (gimp-layer-copy work 0)))
(gimp-image-add-layer image l2 0)
(gimp-drawable-offset l2 1 1 (* (/ (car (gimp-image-width image)) 3) 2 ) 0)
(gimp-layer-set-mode l2 3)
(set! work (car (gimp-image-merge-down image l1 0)))
(set! work (car (gimp-image-merge-down image l2 0)))
(set! l1 (car (gimp-layer-copy work 0)))
(gimp-image-add-layer image l1 0)
(gimp-drawable-offset l1 1 1 0 (/ (car (gimp-image-height image)) 6))
(gimp-layer-set-mode l1 3)
(set! l2 (car (gimp-layer-copy work 0)))
(gimp-image-add-layer image l2 0)
(gimp-drawable-offset l2 1 1 0 (* (/ (car (gimp-image-height image)) 6) 5))
(gimp-layer-set-mode l2 3)
(set! work (car (gimp-image-merge-down image l1 0)))
(set! work (car (gimp-image-merge-down image l2 0)))
))
(if (= effect 0)
(begin
(plug-in-emboss 1 image work 30 45 10 1)
(gimp-layer-set-mode work 5)
(define (aR)
(let* ((a (cons-array 6 'byte)))
(set-pt a 0 0 0)
(set-pt a 1 180 127)
(set-pt a 2 255 255)
a))
(gimp-curves-spline work 0 6 (aR))
(gimp-layer-set-opacity work (* 10 depth))
(plug-in-gauss-iir2 1 image work fsoft fsoft)
(set! work (car (gimp-image-merge-down image work 0)))
))
(if (= effect 1)
(begin
(plug-in-bump-map 1 image drawable work 135 45 depth 0 0 0 0 1 0 1)
(gimp-image-remove-layer image work)
(set! work drawable)
))
(if (= effect 2)
(begin
(plug-in-gauss-iir2 1 image work fsoft fsoft)
(plug-in-bump-map 1 image drawable work 135 65 depth 0 0 0 0 1 1 1)
(gimp-image-remove-layer image work)
(set! work drawable)
))
(if (= effect 3)
(begin
(gimp-layer-set-mode work 4)
(define (aR)
(let* ((a (cons-array 4 'byte)))
(set-pt a 0 0 128)
(set-pt a 1 255 0)
a))
(gimp-curves-spline work 0 4 (aR))
(gimp-layer-set-opacity work (* 10 depth))
(plug-in-gauss-iir2 1 image work ffsoft ffsoft)
(set! work (car (gimp-image-merge-down image work 0)))
))
(if (= effect 4)
(begin
(gimp-layer-set-mode work 6)
(define (aR)
(let* ((a (cons-array 4 'byte)))
(set-pt a 0 0 128)
(set-pt a 1 255 0)
a))
(gimp-curves-spline work 0 4 (aR))
(gimp-layer-set-opacity work (* 10 depth))
(plug-in-gauss-iir2 1 image work fsoft fsoft)
(set! work (car (gimp-image-merge-down image work 0)))
))
(gimp-image-set-active-layer image work)
(gimp-image-clean-all image)
(gimp-displays-flush)
;(gimp-image-undo-enable image)
)