WERBUNG

Gimp Schatten aufhellen - das ultimative Script

bozi

Themenersteller
Hi,
Ich habe mir mal die Mühe gemacht und ein (mein 1.) script-fu gebastelt, welches Schatten aufhellt bzw. Lichter abschwächt. Nutzbar ist es ab Version 2.3.x, mit etwas Anpassung sicher auch mit 2.2.x.
Am besten auch mal den Kopf durchlesen bevor man es nutzt ;)
Code:
; aufh.scm
; erstellt von bozi / osb at gmx.net
; benötigt gimp 2.3.x
; dieses Script basiert ursprünglich auf "Dunkle Schatten im Foto heller machen"
; auf http://gimps.de/gimp/bilder-fotos/dunkles-aufhellen/index.htm
; es ermöglicht den Effekt auf bis zu 300% zu setzen, bis 100% wird dabei nur 1 Korrekturebene benutzt, darüber hinaus mehrere
; Zum noch besseren Abschwächen der Glanzlichter habe ich den Mechanismus etwas abgeändert nocheinmal hinzugefügt
; bei rgb 8bit lässt sich auch Streiten über den Sinn von großen Werten, aber es sind trotzdem auch gute Ergebnisse damit erreichbar.
;
;* Kontrast: verstärkt die Wirkung des Effektes (sinnvolle Werte 20-40), bei hohen Werten muß evtl. der Radius verkleinert werden
;* Radius: verändert den Weichzeichner-Radius der Korrekturebene (Standard ist 15). Bei starken Korrekturen ist dieser erkennbar
;   und man kann mit Aufhellen,Kontrast,Radius etwas variieren um das beste Ergebnis zu erzielen (Radius < 5 Pixel)
;* Korrektur-Ebenen belassen: wenn man sich nach einiger Übung/Erfahrung ziemlich sicher ist in der Parameterwahl,
;   kann man die ganzen Ebenen gleich zusammenfügen lassen
;
(define (script-fu-tiefenlichter
	image
	drawable
	menge
	mengedunkel
	belassen
	kontrast
	radius)
    (let* ((shadow-opacity (max (min menge 100) 0))
	(old-bg (car (gimp-context-get-background)))
    (korr-ebene 0))
    (gimp-image-undo-group-start image)

; erstmal 1 layer kopieren
    (set! korr-ebene (car (gimp-layer-copy drawable 1)))
    (gimp-image-add-layer image korr-ebene -1)
    (gimp-drawable-set-name korr-ebene "Aufheller")

; grundkorrektur erstellen (sw,invertieren,weichzeichnen,kontrast,ebenenmaske_überlagern)
    (gimp-desaturate korr-ebene)
    (gimp-invert korr-ebene)
    (plug-in-gauss-iir -1 (car (gimp-drawable-get-image korr-ebene)) korr-ebene radius TRUE TRUE)
    (gimp-brightness-contrast korr-ebene 0 kontrast)
    (gimp-layer-add-mask korr-ebene (car (gimp-layer-create-mask korr-ebene ADD-COPY-MASK)))
    (set! dunkel-layer (car (gimp-layer-copy korr-ebene 1)))
    (gimp-image-add-layer image dunkel-layer -1)
    (gimp-drawable-set-name dunkel-layer "Abdunkler")
    (gimp-layer-set-mode korr-ebene OVERLAY-MODE)
    (gimp-layer-set-mode dunkel-layer DARKEN-ONLY-MODE)

; aufhellen/abdunkeln, dabei layer evtl mehrmals kopieren
    (while (> menge 100)
	(set! cp-layer (car (gimp-layer-copy korr-ebene 1)))
	(gimp-image-add-layer image cp-layer -1)
	(set! menge (- menge 100))
    )
    (while (> mengedunkel 100)
	(set! cp-layer (car (gimp-layer-copy dunkel-layer 1)))
	(gimp-image-add-layer image cp-layer -1)
	(set! mengedunkel (- mengedunkel 100))
    )
    (gimp-layer-set-opacity korr-ebene menge)
    (gimp-layer-set-opacity dunkel-layer mengedunkel)
    
; farbton und sättigung schützen per weitere layer ganz oben
    (set! korrekturft-layer (car (gimp-layer-copy drawable 1)))
    (gimp-image-add-layer image korrekturft-layer -1)
    (gimp-drawable-set-name korrekturft-layer "Farbtonkorr.")
    (gimp-layer-set-mode korrekturft-layer COLOR-MODE)
    (gimp-image-raise-layer-to-top image korrekturft-layer)
    (set! korrekturst-layer (car (gimp-layer-copy korrekturft-layer 1)))
    (gimp-image-add-layer image korrekturst-layer -1)
    (gimp-drawable-set-name korrekturst-layer "Saettigungskorr.")
    (gimp-layer-set-mode korrekturst-layer SATURATION-MODE)

; aufräumen, ebenen zusammenfügen
    (gimp-context-set-background old-bg)
    (gimp-image-set-active-layer image korr-ebene)
    (if (= belassen FALSE) (gimp-image-flatten image))
    (gimp-image-undo-group-end image)
    (gimp-displays-flush)))

(script-fu-register "script-fu-tiefenlichter"
                    _"<Image>/Script-Fu/Phototools/_Schatten Lichter"
		    "hellt dunkle Bereiche auf oder verdunkelt Lichter ala Tiefen/Lichter in PS"
		    "bozi <bozi@localhost>"
                    "bozi / osb at gmx dot net"
		    "2007/6/1"
		    "RGBA RGB"
                    SF-IMAGE "Image" 0
                    SF-DRAWABLE "Drawable" 0
                    SF-ADJUSTMENT _"Schatten aufhellen" '(100 0 300 1 10 0 0)
                    SF-ADJUSTMENT _"Lichter abdunkeln" '(0 0 300 1 10 0 0)
		    SF-TOGGLE "Korrektur-Ebenen belassen" TRUE
                    SF-ADJUSTMENT _"Kontrast (RTFM!)" '(0 -127 127 1 10 0 0)
                    SF-ADJUSTMENT _"Radius (RTFM!)" '(15 1 100 1 10 0 0)
)

Also: probieren, Meinung sagen :D

bozi
 
AW: Gimp Schatten aufhellen, neue Version: Shadows-Highlights (bozi)

Hi,
Hier nun eine Version die auch der Tiny-fu von 2.3.13 aufwärts frißt. Ich habs nun Verenglischt :eek: weil einige im Gimpnet darüber genörgelt haben und mir ihre Hilfe deshalb verwehrten. Außerdem waren die Umlaute auch Gift für den tiny-fu, aber das konnte mir auch niemand sagen von den Schlaumeiern dort :grumble:
Umbenannt hab ich noch u.a. den Scriptnamen im Menü damits besser Unterschieden werden kann von den anderen ähnlichen Scripts.
Im Endeffekt hab ich nur paar Variablen extra definiert und die Umlaute rausgenommen damits tiny-gemäß ist.

Code:
; aufhtiny.scm
; created by bozi / osbatgmxdotnet
; for gimp 2.3.x
;
;
; dieses Script basiert urspruenglich auf "Dunkle Schatten im Foto heller machen" auf
; http://gimps.de/gimp/bilder-fotos/dunkles-aufhellen/index.htm
; es ermoeglicht den Effekt auf bis zu 300% zu setzen, bis 100% wird dabei nur 1 Korrekturebene benutzt, darueber hinaus mehrere
; Zum noch besseren Abschwaechen der Glanzlichter habe ich den Mechanismus etwas abgeaendert nocheinmal hinzugefuegt
; * 'Contrast': verstaerkt die Wirkung des Effektes (sinnvolle Werte 20-40), bei hohen Werten muss evtl. der Radius verkleinert werden
; * 'Radius': veraendert den Weichzeichner-Radius der Korrekturebene (Standard ist 15). Bei starken Korrekturen ist dieser erkennbar
;   und man kann mit 'lighten Shadows', 'Contrast' und 'Radius' etwas Variieren um das beste Ergebnis zu erzielen (Radius < 5 Pixel)
; * 'leave correction-layers': wenn man sich nach einiger uebung/Erfahrung ziemlich sicher ist in der Parameterwahl,
;   kann man die ganzen Ebenen gleich zusammenfuegen lassen (Haekchen entfernen ;)
;
;
; this Script based on "Brighten dark shadow in a photo" at
; http://gimps.de/en/tutorials/gimp/picture-photo-image/brighten-lighten/index.htm
; Allows to set the effect up to 300%, up to 100% only 1 correction-layer will be used, > 100% ->  multiple layers.
; For restoring of the overexposed areas i added the procedure with some modifications.
; * 'Contrast': increase the effect (reasonable Values 20-40), with higher Values sometimes its better to use a smaller 'Radius'.
; * 'Radius': modifies the blurring radius for the correction-layer (default is 15). The radius is visible at heavy corrections
;   and playing with several values of 'lighten Shadows','Contrast' and 'Radius' brings the best results (try 'Radius' < 5 Pixel too)
; * 'leave correction-layers': with a little practice in setting the right parameters the layers can be flatten too (uncheck this ;).
;
;

(define (script-fu-shadowhighlightbozi
	image
	drawable
	amountlight
	amountdark
	leavelayer
	contrast
	radius)
    
    (let* (
	(shadow-opacity (max (min amountlight 100) 0))
	(old-bg (car (gimp-context-get-background)))
	(light-layer)
	(dark-layer)
	(cp-layer)
	(preserveft-layer)
	(preservest-layer)
	)

	(gimp-image-undo-group-start image)

; 1st job copy 1 layer
	(set! light-layer (car (gimp-layer-copy drawable 1)))
        (gimp-image-add-layer image light-layer -1)
	(gimp-drawable-set-name light-layer "Lighten")

; create basecorrection (s/w,inverting,blur,contrast,layermask_overlay)
        (gimp-desaturate light-layer)
	(gimp-invert light-layer)
        (plug-in-gauss-iir -1 (car (gimp-drawable-get-image light-layer)) light-layer radius TRUE TRUE)
        (gimp-brightness-contrast light-layer 0 contrast)
        (gimp-layer-add-mask light-layer (car (gimp-layer-create-mask light-layer ADD-COPY-MASK)))
        (set! dark-layer (car (gimp-layer-copy light-layer 1)))
        (gimp-image-add-layer image dark-layer -1)
        (gimp-drawable-set-name dark-layer "Darken")
        (gimp-layer-set-mode light-layer OVERLAY-MODE)
        (gimp-layer-set-mode dark-layer DARKEN-ONLY-MODE)

; lighten/darken, maybe multiple layer-copy
	(while (> amountlight 100)
	    (set! cp-layer (car (gimp-layer-copy light-layer 1)))
	    (gimp-image-add-layer image cp-layer -1)
	    (set! amountlight (- amountlight 100))
	)
	(while (> amountdark 100)
	    (set! cp-layer (car (gimp-layer-copy dark-layer 1)))
	    (gimp-image-add-layer image cp-layer -1)
	    (set! amountdark (- amountdark 100))
	)
        (gimp-layer-set-opacity light-layer amountlight)
        (gimp-layer-set-opacity dark-layer amountdark)
    
; preserve hue and saturation by additional layers on top
        (set! preserveft-layer (car (gimp-layer-copy drawable 1)))
        (gimp-image-add-layer image preserveft-layer -1)
        (gimp-drawable-set-name preserveft-layer "HuePreserve")
        (gimp-layer-set-mode preserveft-layer COLOR-MODE)
        (gimp-image-raise-layer-to-top image preserveft-layer)
        (set! preservest-layer (car (gimp-layer-copy preserveft-layer 1)))
        (gimp-image-add-layer image preservest-layer -1)
        (gimp-drawable-set-name preservest-layer "SatPreserve")
        (gimp-layer-set-mode preservest-layer SATURATION-MODE)

; cleaning, flatten layers if needed
        (gimp-context-set-background old-bg)
        (gimp-image-set-active-layer image light-layer)
        (if (= leavelayer FALSE) (gimp-image-flatten image))
        (gimp-image-undo-group-end image)
        (gimp-displays-flush)
    )
)

(script-fu-register "script-fu-shadowhighlightbozi"
                    _"<Image>/Script-Fu/Phototools/_Shadows-Highlights (bozi)"
		    "lighten dark areas and darken highlights"
		    "bozi"
		    "bozi / osb at gmx dot net"
		    "2007/7/27"
		    "RGB*"
                    SF-IMAGE "Image" 0
                    SF-DRAWABLE "Drawable" 0
                    SF-ADJUSTMENT _"lighten Shadows" '(100 0 300 1 10 0 0)
                    SF-ADJUSTMENT _"darken Highlights" '(0 0 300 1 10 0 0)
		    SF-TOGGLE "leave correction-layers" TRUE
                    SF-ADJUSTMENT _"contrast (RTFM!)" '(0 -127 127 1 10 0 0)
                    SF-ADJUSTMENT _"radius (RTFM!)" '(15 1 100 1 10 0 0)
)


Probieren, Meinung sagen ;)

bozi
 
AW: Gimp Schatten aufhellen, neue Version: Shadows-Highlights (bozi)

Interessant.:top:
Hi,
Außerdem waren die Umlaute auch Gift für den tiny-fu, aber das konnte mir auch niemand sagen von den Schlaumeiern dort :grumble:
Das lag sicher daran, dass Du im Script nicht UTF-8 als Zeichensatz verwendet hast. Klar, dass die Schlaumeier Dir da nicht helfen konnten. Merke: Frage natural english speakers nie nach Zeichensätzen! Lieber einen Chinesen fragen. :evil:

Das Ding wirft bei mir in GIMP 2.2.11 den Fehler:
Code:
Diese Ebene befindet sich bereits ganz oben.
Und:
Code:
Skript-Fu Fehler beim Ausführen von
 (script-fu-shadowhighlightbozi 2 4 81.521739130434781 0 FALSE 0 15)
ERROR: Procedural database execution failed:
    (gimp_image_raise_layer_to_top 2 9)
Ooops, sehe gerade: ab Version 2.3.x. Alles klar.
 
Zuletzt bearbeitet:
Hi,
Es hatte gelangt daß die Umlaute in den Komentaren waren, damit das Script von Gimp nicht geladen wurde :eek:
Sowas ist nun wirklich etwas übertrieben. Kommentare sollte der Interpreter links liegen lassen, egal was da für lustige Zeichen noch kommen nach dem Semikolon vorn. ;)
Leider geht das Script nur ab 2.3. Bei 2.2 sind einige Funktionsnamen etwas anders. Das hatte ich auch bitter Erfahren müssen am Anfang des Projekts. Man kann es aber rel. leicht anpassen denk iach mal. Von 2.2->2.3 gings zumindest rel gut. Aber 2.3 ist wirklich lohnenswert und von daher - nie wieder 2.2 ;)

bozi
 
Nun, die Releases mit ungerader Zahl an der 2. Stelle sind doch alle Development-Releases. Da ich keinen Bock habe zu testen, habe ich die auch nie installiert.
Ich warte auf die 2.4. Die soll ja bald kommen.
BTW: Hast Du es mal in UTF-8 probiert. Sollte mich stark wundern, wenn das nicht geht. Immerhin kann Tiny-Fu Strings in UTF-8 auch verarbeiten.
Ich hänge das mal in UTF-8 und Umlauten an.
 
WERBUNG
Zurück
Oben Unten