PDA

Vollständige Version anzeigen : [Script] Selektion hervorheben


Mohi
12.11.2008, 22:41
Huhu liebe GIMP-Community

Ich habe schon vor längerer Zeit mal ein kleines Skript geschrieben, das die aktive Selektion hervorhebt. Grund dafür war, dass ich früher in einem anderen Forum relativ häufig Hilfestellungen anhand von Screenshots gegeben habe und es mir irgendwann zu lästig wurde, den gewünschten Bereich immer von Hand hervorzuheben.
Nun dachte ich, dass hier vielleicht auch der eine oder andere daran Interesse haben könnte.

Wenn man das Skript angewendet hat sieht das Ergebnis so aus:
9328

Die Werte des Weichzeichners können vom Benutzer eingestellt werden oder der Effekt kann auch ganz ausgeschaltet werden. Die Farbe um den Fokus ist auch frei wählbar.
Angewendet werden kann das Skript auf RGB- und Graustufenbilder, auf denen ein Bereich selektiert wurde.
Das Skript erscheint im Menü Bearbeiten.

Englische Version:
;Bring-out-Script for GIMP 2.6 by Mohi
;Last update: 12th November in 2008 by Mohi

;This script was made for people who often use screenshots for explanations.
;It brings the selection out by darkening (and blurring if you want) the deselected part of the picture
;and giving the selection a border.

;this function brings a selection out
(define (use-bring-out sfImg sfDrwbl sfColour sfGaussian sfXGaussian sfYGaussian)
(let*
(;------declare variables
(varImageType
(car
(gimp-image-base-type sfImg)
)
)

(varWidth
(car
(gimp-image-width sfImg)
)
)
(varHeight
(car
(gimp-image-height sfImg)
)
)
(varDimout 0)
(varBorder 0)
(varContent 0)
);------end declaration

;if image-type is RGB(0) set layer-type to RGBA(1) otherwise set layer-type to GRAYA(3)
(if (= varImageType 0)
(set! varImageType 1)
(set! varImageType 3)
)

;create the border-layer
(set! varBorder
(car
(gimp-layer-new
sfImg
varWidth
varHeight
varImageType
""
75
NORMAL-MODE
)
)
)

;create the dimout-layer
(set! varDimout
(car
(gimp-layer-new
sfImg
varWidth
varHeight
varImageType
""
50
NORMAL-MODE
)
)
)

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

;if "use blur" was chosen, create a new layer from all visible layers and blur it
(if (= sfGaussian TRUE)
(begin
(set! varContent
(car
(gimp-layer-new-from-visible
sfImg
sfImg
"Picture"
)
)
)
(gimp-image-add-layer
sfImg
varContent
-1
)
)
)

(gimp-image-add-layer
sfImg
varBorder
-1
)
(gimp-image-add-layer
sfImg
varDimout
-1
)

(gimp-edit-clear varDimout)
(gimp-context-set-foreground sfColour)
(gimp-context-set-background '(0 0 0))
(gimp-selection-invert sfImg)
(gimp-edit-clear varDimout)
(gimp-edit-fill
varDimout
BACKGROUND-FILL
)

(if (= sfGaussian TRUE)
(plug-in-gauss
RUN-NONINTERACTIVE
sfImg
varContent
sfXGaussian
sfYGaussian
0
)
)

(gimp-edit-clear varBorder)
(gimp-selection-invert sfImg)
(gimp-selection-grow
sfImg
2
)

(gimp-edit-fill
varBorder
FOREGROUND-FILL
)
(gimp-selection-shrink
sfImg
4
)
(gimp-edit-clear varBorder)
(gimp-selection-clear sfImg)
(plug-in-gauss
RUN-NONINTERACTIVE
sfImg
varBorder
5
5
0
)

(set! varDimout
(car
(gimp-image-merge-down
sfImg
varDimout
EXPAND-AS-NECESSARY
)
)
)

(gimp-drawable-set-name
varDimout
"Accentuation"
)

(gimp-image-undo-group-end sfImg)
(gimp-displays-flush)

(gimp-context-set-foreground '(0 0 0))
(gimp-context-set-background '(255 255 255))
)
)

;this function checks if there is a selection
(define (bring-out sfImg sfDrwbl sfColour sfGaussian sfXGaussian sfYGaussian)
(let*
(;---------declare variables
(varNoSelection
(car
(gimp-selection-is-empty sfImg)
)
)
);---------end declaration
;if there's a selection, bring it out, otherwise do nothing
(if (= FALSE varNoSelection)
(use-bring-out
sfImg
sfDrwbl
sfColour
sfGaussian
sfXGaussian
sfYGaussian
)
)
)

)

(script-fu-register
"bring-out"
"Bring _out selection"
"Brings the selected part of an image out."
"Mohi"
"You are allowed to modify and distribute this script as long as you don't remove the name of the author."
"2008-10-26"
"RGB*, GRAY*"
SF-IMAGE "" 0
SF-DRAWABLE "" 0
SF-COLOR "Colour" '(255 0 0)
SF-TOGGLE "Use blur" TRUE

;start-value: 6.5, min-value: 0.1, max-value: 99, small step: 1, large step: 5, data type: float, control type: spinner
SF-ADJUSTMENT "Horizontal blur value" '(6.5 0.1 99 1 5 1 1)
SF-ADJUSTMENT "Vertical blur value" '(6.5 0.1 99 1 5 1 1)
)

(script-fu-menu-register
"bring-out"
"<Image>/Edit"
)
Für alle Leute, die lieber eine deutsche Version möchten(nur Oberflächenbeschriftung wurde übersetzt):
;Bring-out-Script for GIMP 2.6 by Mohi
;Last update: 12th November in 2008 by Mohi

;This script was made for people who often use screenshots for explanations.
;It brings the selection out by darkening (and blurring if you want) the deselected part of the picture
;and giving the selection a border.

;this function brings a selection out
(define (use-bring-out sfImg sfDrwbl sfColour sfGaussian sfXGaussian sfYGaussian)
(let*
(;------declare variables
(varImageType
(car
(gimp-image-base-type sfImg)
)
)

(varWidth
(car
(gimp-image-width sfImg)
)
)
(varHeight
(car
(gimp-image-height sfImg)
)
)
(varDimout 0)
(varBorder 0)
(varContent 0)
);------end declaration

;if image-type is RGB(0) set layer-type to RGBA(1) otherwise set layer-type to GRAYA(3)
(if (= varImageType 0)
(set! varImageType 1)
(set! varImageType 3)
)

;create the border-layer
(set! varBorder
(car
(gimp-layer-new
sfImg
varWidth
varHeight
varImageType
""
75
NORMAL-MODE
)
)
)

;create the dimout-layer
(set! varDimout
(car
(gimp-layer-new
sfImg
varWidth
varHeight
varImageType
""
50
NORMAL-MODE
)
)
)

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

;if "use blur" was chosen, merge all layers and blur them
(if (= sfGaussian TRUE)
(begin
(set! varContent
(car
(gimp-layer-new-from-visible
sfImg
sfImg
"Bild"
)
)
)
(gimp-image-add-layer
sfImg
varContent
-1
)
)
)

(gimp-image-add-layer
sfImg
varBorder
-1
)
(gimp-image-add-layer
sfImg
varDimout
-1
)

(gimp-edit-clear varDimout)
(gimp-context-set-foreground sfColour)
(gimp-context-set-background '(0 0 0))
(gimp-selection-invert sfImg)
(gimp-edit-clear varDimout)
(gimp-edit-fill
varDimout
BACKGROUND-FILL
)

(if (= sfGaussian TRUE)
(plug-in-gauss
RUN-NONINTERACTIVE
sfImg
varContent
sfXGaussian
sfYGaussian
0
)
)

(gimp-edit-clear varBorder)
(gimp-selection-invert sfImg)
(gimp-selection-grow
sfImg
2
)

(gimp-edit-fill
varBorder
FOREGROUND-FILL
)
(gimp-selection-shrink
sfImg
4
)
(gimp-edit-clear varBorder)
(gimp-selection-clear sfImg)
(plug-in-gauss
RUN-NONINTERACTIVE
sfImg
varBorder
5
5
0
)

(set! varDimout
(car
(gimp-image-merge-down
sfImg
varDimout
EXPAND-AS-NECESSARY
)
)
)

(gimp-drawable-set-name
varDimout
"Hervorhebung"
)

(gimp-image-undo-group-end sfImg)
(gimp-displays-flush)

(gimp-context-set-foreground '(0 0 0))
(gimp-context-set-background '(255 255 255))
)
)

;this function checks if there is a selection
(define (bring-out sfImg sfDrwbl sfColour sfGaussian sfXGaussian sfYGaussian)
(let*
(;---------declare variables
(varNoSelection
(car
(gimp-selection-is-empty sfImg)
)
)
);---------end declaration
;if there's a selection, bring it out, otherwise do nothing
(if (= FALSE varNoSelection)
(use-bring-out
sfImg
sfDrwbl
sfColour
sfGaussian
sfXGaussian
sfYGaussian
)
)
)

)

(script-fu-register
"bring-out"
"Selekti_on hervorheben"
"Hebt den selektierten Bereich hervor."
"Mohi"
"Du darfst dieses Skript verändern und verteilen solange du den Namen des Autors nicht entfernst."
"12.11.2008"
"RGB*, GRAY*"
SF-IMAGE "" 0
SF-DRAWABLE "" 0
SF-COLOR "Farbe" '(255 0 0)
SF-TOGGLE "Gaußscher Weichzeichner" TRUE

;start-value: 6.5, min-value: 0.1, max-value: 99, small step: 1, large step: 5, data type: float, control type: spinner
SF-ADJUSTMENT "Horizontaler Gaußscher Wert" '(6 1 99 1 5 1 1)
SF-ADJUSTMENT "Vertikaler Gaußscher Wert" '(6 1 99 1 5 1 1)
)

(script-fu-menu-register
"bring-out"
"<Image>/Edit"
)
Wie gesagt, nichts Großes aber ich find's manchmal doch ganz nützlich.

Gruß Mohi

Avarra
15.11.2008, 15:14
Hi Mohi,

das ist ja richtig fett. Danke ich werde den jetzt mal testen. Sag mal, weißt du wie ich scripte ins deutsche bringe, ich meine damit die Oberfläche, nachdem ich das script aufgerufen habe in deutsch erscheint ...

Lieben Gruß

Avarra

houz
15.11.2008, 16:52
Im Zweifel von Hand: Script im Texteditor öffnen und alle Strings übersetzen.

Avarra
15.11.2008, 17:04
OK wo finde ich die strings ... ich habe so viele tolle scripte und die sind leider dann immer auf english.

geht das auch mit py plugins?

Lieben Gruß

Avarra

houz
15.11.2008, 17:41
Ja, geht auch mit py-Dateien. Du musst die Datei nur in einem Texteditor (Word ist kein Texteditor!) öffnen und alles, was da an Texten steht, die irgendwo angezeigt werden, übersetzen.

Avarra
15.11.2008, 18:02
Hi du,

ich benutze ++notepad, weil ich auch damit meine css scripte schreibe über den KompoZer bzw. sie auslagere ... ich bin mir jetzt nur nicht sicher, was ich übersetzen soll und was english bleibt ... das ist natürlich eine Herausforderung für mich.

ich habe die py layer effects und würde es besser finden, sie in deutsch zu machen ... das ist manchmal schwer mit ihnen zu arbeiten ...

ich schau mal, ob ich das hin bekomme

Aber danke für die Antwort

Lieben Gruß

Avarra

Mohi
16.11.2008, 01:39
ich bin mir jetzt nur nicht sicher, was ich übersetzen soll und was english bleibt
Alle Texte, die in Gänsefüßchen stehen. Den Rest kannst du lassen.