PDA

Vollständige Version anzeigen : Hintergrund entfernen


flashnfantasy
13.04.2005, 11:23
Der Script entfernt einen komplett weißen oder schwarzen Hintergrund.
Eigentlich habe ich den Script geschrieben, um bei den komplexen Strukturen wie bei den elektrischen Schafen
http://gimpforum.de/ftopic544.html
eine gute Möglichkeit habe, mehrere Bilder zu überlagern.

Der Script erstellt eine Kontrastmaske aus dem vorhanden Bild.
Diese Kontrastmaske kann man noch leicht weichzeichnen lassen - was dann ein für das Auge angenehmeres Rendering erzeugt.

Wesentlich ist aber, daß man den Kontrast verstärken kann.
Im Default ist der Kontrast so eingestellt, daß nur die weißen bzw. schwarzen Flächen ausgeblendet werden.
Man kann jedoch den Maskenkontrast veringern und dadurch auch hellere bzw. dunklere Teile des Bildes in das Ausblenden mit einbeziehen.

705

(script-fu-register "script-fu-rback"
_"<Image>/Script-Fu/Selection/remove-background"
"Entfernt den Hintergrund"
"Mathias Weitz"
"Mathias Weitz"
"18/07/03"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-OPTION _"BackgroundColor" '(_"White"
_"Black"
)
SF-ADJUSTMENT _"Soft" '(0.3 0 5 0.1 0.1 1 0)
SF-ADJUSTMENT _"Contrast" '(254 0 254 16 16 0 0)
SF-TOGGLE _"New Layer" TRUE
)

(define (script-fu-rback inImage inLayer inBGround inSoft inContrast newLayer)

(gimp-undo-push-group-start inImage)
(set! theWidth (car (gimp-image-width inImage)))
(set! theHeight (car (gimp-image-height inImage)))
(set! workLayer inLayer)

(if (= newLayer TRUE)
(begin
(set! layerA (car (gimp-layer-new inImage theWidth theHeight 1 "WorkLayer" 100 0)))
(gimp-image-add-layer inImage layerA 0)
(gimp-edit-copy inLayer)
(set! flayerA (car (gimp-edit-paste layerA 0)))
(gimp-floating-sel-anchor flayerA)
(gimp-selection-clear inImage)
(set! workLayer layerA)
))

(gimp-selection-all inImage)
(set! darksel (car (gimp-channel-new inImage (car (gimp-image-width inImage)) (car (gimp-image-height inImage)) "darkChannel" 100 '(255 0 0))))
(gimp-image-add-channel inImage darksel 0)
(gimp-edit-copy workLayer)
(set! darkselfloat (car (gimp-edit-paste darksel 0)))
(gimp-floating-sel-anchor darkselfloat)
(if (= inBGround 1)
(gimp-invert darksel))
(gimp-levels darksel 0 inContrast 255 1 0 255)
(plug-in-c-astretch 0 inImage darksel)
(if (< 0 inSoft)
(begin
(plug-in-gauss 1 inImage darksel inSoft inSoft 1)
(gimp-levels darksel 0 0 127 1 0 255)
))
(gimp-selection-load darksel)
(gimp-edit-clear workLayer)
(gimp-image-remove-channel inImage darksel)
;(gimp-channel-delete darksel) ;quote for GIMP 2.0
(gimp-selection-none inImage)
(gimp-undo-push-group-end inImage)
(gimp-displays-flush)
)

emptyvi
13.11.2005, 00:41
Funzt bei mir nicht!
:(

Bricht immer ab und gibt ne Fehlermeldung aus.

Roxxy
07.10.2008, 21:13
wie packt man des script denn in gimp rein?? :confused: ^^

faezzi
08.10.2008, 10:25
Zwei Fehler:


Plug-In "remove-background" left image undo in inconsistent state, closing open undo groups.
und


Error while excecuting (script-fu-rback 4 16 0 0.29999999999999999 254 TRUE)
Error: set!: unbound variable: theWidth
GIMP 2.4.5 auf XP Pro. SP2

faezzi
17.10.2008, 11:17
Version 2.6.1 bringts ohne genaue FM zum Absturz.