PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Gimp 2.4.5] Mehrere Scripte autom. hintereinander?



B-52
07.10.09, 12:13
Hallo!

Bei meinen Bildbearbeitungen greife ich auf eine Reihe von Scripten zu (Script-Fu). Die Abläufe sind bis auf einige Ausnahmen gleich. Gibt es eine Möglichkeit die Scripte nach und nach automatisch ablaufen zu lassen?

Ich hab schon versucht die einzelnen Scripte in eine Datei zu packen, den Bereich "(script-fu-register ....)" entsprechend zu ersetzen bzw zu löschen. Brachte jedoch kein Ergebniss. Für Hilfe schon Dank im voraus.

klaus_harrer
07.10.09, 22:10
Hallo

Natürlich geht es.
Es müssen alle Scripte zu einen Script zusammengefügt und ein Registerbereich erstellt werden.
Oder man fügt alle Scpite zu einen ohne Registerbereich. ein sogenanntes Batchscript.
Vieleicht hilft dir diese Seite (www.gimp-scripte.de) weiter.

MfG
Klaus Harrer

B-52
08.10.09, 14:04
Hallo Klaus,

hat nicht wirklich weitergeholfen (schöne Seite übrigens). Vielleicht habe ich mein Problem auch falsch beschrieben. Also, ich habe zur Zeit vier verschiedene Scripte die ich in gleicher Reihenfolge bei der Bearbeitung aufrufe. Diese vier wollte ich also in eine Datei packen damit der Durchlauf "am Stück" erfolgen kann. Der prinzipielle Aufbau ist, auch aufgrund Deiner Seite, schon klar. Dennoch erhalte ich Fehlermeldungen. Zur Zeit sieht die Datei so aus:



(define (script-fu-autocolor img)
SF-IMAGE "Image" 0
SF-DRAWABLE "Layer" 0

...script...

(gimp-display-flush)
)

(define (script-fu-shadow-highlight image drawable shadows highlights shtw hitw blur InFlatten)

SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"Mask Area" '(0 -0.5 1 0.1 0.1 1 0)
SF-ADJUSTMENT _"Blur Short" '(20 1 50 1 1 0 0)
SF-ADJUSTMENT _"Blur Bright" '(30 1 50 1 1 0 0)
SF-TOGGLE _"Short on Top" TRUE
SF-ADJUSTMENT _"Improve" '(10 0 20 1 1 0 0)

...script....

(gimp-displays-flush)

usw

(script-fu-register "script-fu-test"
_"<Image>/Script-Fu/Photo/Test"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"
)


Und hier heist es dann Fehler beim Ausführen von (script-fu-test) Error: eval: unbound variable: script-fu-test. Irgendwo scheine ich da einen Denkfehler zu haben.

klaus_harrer
08.10.09, 23:29
Hallo

Das sollte etwa mit einigen Anpassungen so funktionieren.



(define (script-fu-test img drw mask_area blur_short blur_bright short_top improve)

(script-fu-autocolor img)




(script-fu-shadow-highlight img drw shadows highlights shtw hitw blur InFlatten)




(gimp-displays-flush)


(script-fu-register "script-fu-test"
"<Image>/Script-Fu/Photo/Test"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"Mask Area" '(0 -0.5 1 0.1 0.1 1 0)
SF-ADJUSTMENT _"Blur Short" '(20 1 50 1 1 0 0)
SF-ADJUSTMENT _"Blur Bright" '(30 1 50 1 1 0 0)
SF-TOGGLE _"Short on Top" TRUE
SF-ADJUSTMENT _"Improve" '(10 0 20 1 1 0 0)
weitere Parameter die die einzelnen Scripte benötigen
)


MfG
Klaus Harrer

B-52
09.10.09, 05:40
Auf die Idee die Parameter nach unten in den Registerbereich zu setzen bin ich nicht gekommen, da ich davon ausgegangen bin das diese zu den einzelnen Scripten unbedingt gehören. Habe jetzt den Aufbau entsprechend geändert, allerdings werden die Scripte nicht ausgeführt. Die Parameterabfrage für das zweite Script erscheint noch, aber ist ohne Funktion. Falls es hilft könnte ich die Scripte in der reihenfolge hier einstellen wie ich sie brauche um dem Fehler auf die Spur zu kommen.

klaus_harrer
09.10.09, 07:15
Hallo B-52,

Schön wäre es wenn du das Script posten würdes damit man eine Fehleranalyse machen könnte.

MfG
KLaus Harrer

B-52
09.10.09, 09:50
Danke für die Geduld. Ich poste hier die einzelnen Scripte in der Reihenfolge wie ich sie normalerweise abarbeite:



(define (script-fu-autocolor img)

; start undo block
(gimp-undo-push-group-start img)

; Das aktive Layer mit 1stlayer adressieren
(set! 1stlayer (car (gimp-image-get-active-layer img)))

;Autolevel Colors
(gimp-levels-stretch 1stlayer)

; stop undo block
(gimp-undo-push-group-end img)


; Display aktualisieren
(gimp-displays-flush)


)

(script-fu-register "script-fu-autocolor"
_"Autocolor"
"Autocolor"
"Pierre Wasser <pierre@samthammel.de>"
"Pierre Wasser"
"23.07.2007"
"RGB*, GRAY*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Layer" 0
)


(Hier müsste jetzt eigendlich noch ein Script für Filter->Verbessern->Unscharf maskieren hinkommen, aber bisher nichts gefunden)



(define (script-fu-shadow-highlight image drawable shadows highlights shtw hitw blur InFlatten)

;make shadow layer
(let ((shadows-layer (car (gimp-layer-copy drawable 1))))
(gimp-drawable-set-name shadows-layer "Shadows")
(gimp-image-add-layer image shadows-layer -1)

;make it grey, blurred, inverted and set as overlay
(gimp-desaturate shadows-layer)
(plug-in-gauss-iir2 1 image shadows-layer blur blur)
(gimp-invert shadows-layer)
(gimp-layer-set-mode shadows-layer 5)

;copy shadow to highlight
(define highlights-layer (car (gimp-layer-copy shadows-layer 1)))
(gimp-drawable-set-name highlights-layer "Highlights")
(gimp-image-add-layer image highlights-layer -1)

;process the shadows layer
(gimp-levels shadows-layer 0 0 255 shtw 0 255)
(plug-in-colortoalpha 1 image shadows-layer '(0 0 0))
(gimp-layer-set-opacity shadows-layer shadows)

;process the highlights layer
(gimp-levels highlights-layer 0 0 255 hitw 0 255)
(plug-in-colortoalpha 1 image highlights-layer '(255 255 255))
(gimp-layer-set-opacity highlights-layer highlights)

; Flatten the image, if needed.
(cond
((= InFlatten TRUE)
(begin(gimp-image-merge-visible-layers image 0))
)
)

;Update image window
(gimp-displays-flush)))

(script-fu-register "script-fu-shadow-highlight"
"<Image>/Filters/Light and Shadow/Shadow&Highlight"
"Removes shadows and highlights from a photograph"
"Magnus St�lnacke"
"Magnus St�lnacke"
"April 27, 2008"
"RGB* GRAY*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Shadow Amount" '(50 0 100 1 1 0 0)
SF-ADJUSTMENT "Highlight Amount" '(50 0 100 1 1 0 0)
SF-ADJUSTMENT "Shadow Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Highlight Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Contrast Radius" '(25 1 49 1 1 0 0)
SF-TOGGLE "Flatten Image" FALSE
)




; define double border ae function
(define (script-fu-photo-double-border-ae img drawable color1 border1 color2 border2 offset_type offset_width cut_type use_inside use_blur blur_strength)
(let*
(
(saveForegroundColor (car (gimp-context-get-foreground)))
(imgWidth (car (gimp-image-width img)))
(imgHeight (car (gimp-image-height img)))

(newWidth)
(newHeight)
(selectWidth1)
(selectHeight1)
(selectWidth2)
(selectHeight2)
(xPos 0)
(yPos 0)

(newLayer)
)

; ---------------------------------------------------------------
(gimp-undo-push-group-start img)
; ---------------------------------------------------------------

; check inputs
(if (= use_blur TRUE)
(set! use_inside TRUE)
)

; ---------------------------------------------------------------

; convert gray/indexed images to rgb color
(if (= (car (gimp-drawable-is-rgb drawable)) FALSE)
(gimp-image-convert-rgb img)
)

; calc new size
(set! newWidth (+ imgWidth (* 2 border1) (* 2 border2)))
(set! newHeight (+ imgHeight (* 2 border1) (* 2 border2)))

; calc selects for outside or inside border
(if (= use_inside FALSE)
; border outside
(begin
(set! selectWidth1 (+ imgWidth (* 2 border2)))
(set! selectHeight1 (+ imgHeight (* 2 border2)))
(set! selectWidth2 imgWidth)
(set! selectHeight2 imgHeight)
)

; border inside
(begin
(set! selectWidth1 (- imgWidth (* 2 border1)))
(set! selectHeight1 (- imgHeight (* 2 border1)))
(set! selectWidth2 (- imgWidth (* 2 border1) (* 2 border2)))
(set! selectHeight2 (- imgHeight (* 2 border1) (* 2 border2)))
)
)

; calc resize position
(set! xPos (+ border1 border2))
(set! yPos (+ border1 border2))

; correct new size and resize position for offset_width
(if (= offset_type 1) ; left
(begin
(set! newWidth (+ newWidth offset_width))
(set! xPos (+ xPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 offset_width))
(set! selectWidth2 (- selectWidth2 offset_width))
)
)
)
)
(if (= offset_type 2) ; top
(begin
(set! newHeight (+ newHeight offset_width))
(set! yPos (+ yPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 offset_width))
(set! selectHeight2 (- selectHeight2 offset_width))
)
)
)
)
(if (= offset_type 3) ; right
(begin
(set! newWidth (+ newWidth offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 offset_width))
(set! selectWidth2 (- selectWidth2 offset_width))
)
)
)
)
(if (= offset_type 4) ; bottom
(begin
(set! newHeight (+ newHeight offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 offset_width))
(set! selectHeight2 (- selectHeight2 offset_width))
)
)
)
)
(if (= offset_type 5) ; horizontal
(begin
(set! newWidth (+ newWidth (* 2 offset_width)))
(set! xPos (+ xPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 (* 2 offset_width)))
(set! selectWidth2 (- selectWidth2 (* 2 offset_width)))
)
)
)
)
(if (= offset_type 6) ; vertical
(begin
(set! newHeight (+ newHeight (* 2 offset_width)))
(set! yPos (+ yPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 (* 2 offset_width)))
(set! selectHeight2 (- selectHeight2 (* 2 offset_width)))
)
)
)
)

; ---------------------------------------------------------------

; resize to new size
(if (= use_inside FALSE)
(gimp-image-resize img newWidth newHeight xPos yPos)
)

; clear selection
(gimp-selection-none img)

; create new layer
(if (= use_blur FALSE)
; color border
(begin
(set! newLayer
(car
(gimp-layer-new
img
(car (gimp-image-width img))
(car (gimp-image-height img))
RGBA-IMAGE
"Border"
100
NORMAL
)
)
)
(gimp-image-add-layer img newLayer -1)
(gimp-drawable-fill newLayer TRANSPARENT-FILL)
)

; blur border
(begin
(set! newLayer (car (gimp-layer-copy drawable TRUE)))
(gimp-drawable-set-name newLayer "Border")
(gimp-layer-set-opacity newLayer 100)
(gimp-image-add-layer img newLayer -1)

; Gaußscher Weichzeichner
(if (> blur_strength 0)
(plug-in-gauss-rle 1 img newLayer blur_strength 1 1)
)
)
)

; ---------------------------------------------------------------

; create rectangle selection 1
(gimp-rect-select
img
(- xPos border2)
(- yPos border2)
selectWidth1
selectHeight1
0 ;operation
0 ;feather
0 ;feather-radius
)

; creat border color or blur
(if (= use_blur FALSE)
; use color Border
(begin
; invert selection 1
(gimp-selection-invert img)

; set foreground color to color1
(gimp-context-set-foreground color1)

; fill selection 1 with color1
(gimp-edit-fill newLayer FOREGROUND-FILL)
)

; use blur border
(begin
; cut selection
(gimp-edit-cut newLayer)
)
)

; clear selection
(gimp-selection-none img)

; ---------------------------------------------------------------

; create border 2
(if (> border2 0)
(begin
; create rectangle selection 2
(gimp-rect-select
img
(- xPos border2)
(- yPos border2)
selectWidth1
selectHeight1
0 ;operation
0 ;feather
0 ;feather-radius
)

(gimp-rect-select
img
xPos
yPos
selectWidth2
selectHeight2
1 ;operation
0 ;feather
0 ;feather-radius
)

; set foreground color to color2
(gimp-context-set-foreground color2)

; fill selection 2 with color2
(gimp-edit-fill newLayer FOREGROUND-FILL)
(gimp-selection-clear img)
)
)

; ---------------------------------------------------------------

; cut borders to new image size
(if (= cut_type 1) ; horizontal
(begin
(if (= use_inside FALSE)
; outside
(gimp-image-resize img newWidth imgHeight 0 (- yPos))

; inside
(gimp-image-resize img imgWidth selectHeight2 0 (- yPos))
)

; cut (resize)
(gimp-layer-resize-to-image-size newLayer)
)
)
(if (= cut_type 2) ; vertical
(begin
(if (= use_inside FALSE)
; outside
(gimp-image-resize img imgWidth newHeight (- xPos) 0)

; inside
(gimp-image-resize img selectWidth2 imgHeight (- xPos) 0)
)

; cut (resize)
(gimp-layer-resize-to-image-size newLayer)
)
)

; ---------------------------------------------------------------

; restore colors
(gimp-context-set-foreground saveForegroundColor)

; ---------------------------------------------------------------
(gimp-undo-push-group-end img)
; ---------------------------------------------------------------

; display result
(gimp-displays-flush img)

; return values
(list img drawable newLayer)
)
)

; register vignette function
(script-fu-register
"script-fu-photo-double-border-ae" ;func name
"Doppelrahmen (Anticeye Edition) ..." ;menu label
"Creates a double border around a photo." ;description
"Christoph Zirkelbach" ;author
"Christoph Zirkelbach" ;copyright notice
"July 21, 2008" ;date created
"" ;image type that the script works on
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-COLOR "Rahmenfarbe außen" '(0 0 0)
SF-ADJUSTMENT "Breite des Rahmens" '(20 1 1000 1 10 0 1)
SF-COLOR "Rahmenfarbe innen" '(255 255 255)
SF-ADJUSTMENT "Breite des Rahmens" '(1 0 1000 1 10 0 1)
SF-OPTION "Rahmenausdehnung" (mapcar car '(
("keine" 0) ; none
("nach links" 1) ; left
("nach oben" 2) ; top
("nach rechts" 3) ; right
("nach unten" 4) ; bottom
("mittig horizontal" 5) ; horizontal
("mittig vertikal" 6) ; vertical
)
)
SF-ADJUSTMENT "Breite der Rahmenausdehnung" '(20 1 1000 1 10 0 1)
SF-OPTION "Rahmenbeschnitt" (mapcar car '(
("keinen" 0) ; none
("horizontal (oben und unten)" 1) ; horizontal (cut top and bottom border)
("vertikal (links und rechts)" 2) ; vertical (cut left and right border)
)
)
SF-TOGGLE "Rahmen innerhalb des Bildes anlegen. (Sichtbarer Bereich des Bildes wird kleiner!)" FALSE
SF-TOGGLE "Statt des äußeren Rahmens einen nach innen gesetzten unscharfen Glasrahmen verwenden." FALSE
SF-ADJUSTMENT "Unschärfe des Glasrahmens" '(20 0 100 1 10 0 0)
)
(script-fu-menu-register "script-fu-photo-double-border-ae" "<Image>/Script-Fu/Photo/")



(Hier ein Script für Bild->Skalieren width 800 height automatisch wäre perfekt, aber eine Art Rekorder habe ich leider nicht gefunden)

Das war es an Scripten die ich zur Zeit benutze. Da sie mir viel Arbeit abnehmen möchte ich sie nicht mehr missen. Bei den Scripten mit Benutzerabfrage habe ich feste Werte und sind auch so bereits im Script an der Stelle eingetragen. Wenn man das jetzt fest in das Script jeweils bekommt wäre es der Hammer, also das die Scripte ohne die Benutzerabfragen dann laufen. Nur das ist zu hoch für mich.

klaus_harrer
10.10.09, 17:15
Hallo

Bitte schau dir den Code noch einmal genau an.
Du musst nicht die kompletten Scripte in das zusammemgefasste Script schreiben da du diese schon installiert hast(PDB).
Du brauchst die Parameter(Argumente) der einzelnen Scripte z.B
"script-fu-shadow-highlight" braucht img drw die im Registerbereich auch vorhanden sind SF-IMAGE SF-DRAWABLE u.s.w siehe Script unterhalb.



(define (script-fu-test img drw mask_area blur_short blur_bright short_top improve)

(script-fu-autocolor img)



(script-fu-shadow-highlight img drw shadows highlights shtw hitw blur InFlatten)




(gimp-displays-flush)


(script-fu-register "script-fu-test"
"<Image>/Script-Fu/Photo/Test"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"Mask Area" '(0 -0.5 1 0.1 0.1 1 0)
SF-ADJUSTMENT _"Blur Short" '(20 1 50 1 1 0 0)
SF-ADJUSTMENT _"Blur Bright" '(30 1 50 1 1 0 0)
SF-TOGGLE _"Short on Top" TRUE
SF-ADJUSTMENT _"Improve" '(10 0 20 1 1 0 0)
weitere Parameter die die einzelnen Scripte benötigen
)


MfG
Klaus Harrer

B-52
16.10.09, 00:48
Wenn ich also das zusammengefasste Script so aufbaue wie Du es im letzten Beitrag angezeigt hast wird zwar beim registrieren des Scripts kein Fehler ausgegeben, dafür erhalte ich alle Parameter-Abfragen in einem Fenster (soweit, so gut) und anschließend den Fehler



Fehler beim Ausführen von
script-fu-test 2 6 100 50 1 1 25 FALSE '(0 0 0) 5 '(255 255 255) 1 0 20 0 FALSE FALSE....

Error: eval: unbound variable: image


Ich hab etwas gesucht werde aber nicht wirklich schlau draus. Hier mein jetziger Versuch:



;Hell-/Dunkelbearbeitung
(define (script-fu-shadow-highlight image drawable shadows highlights shtw hitw blur InFlatten)

;Scalieren
(script-scale524 img draw)

;Rahmen
(script-fu-photo-double-border-ae img drawable color1 border1 color2 border2 offset_type offset_width cut_type use_inside use_blur blur_strength)

;Copyright
(script-fu-watermark image drawable text font pixsize location opacity)


(gimp-displays-flush)
)

(script-fu-register "script-fu-test"
"<Image>/Script-Fu/Photo/Test"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"

SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Shadow Amount" '(100 0 100 1 1 0 0)
SF-ADJUSTMENT "Highlight Amount" '(50 0 100 1 1 0 0)
SF-ADJUSTMENT "Shadow Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Highlight Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Contrast Radius" '(25 1 49 1 1 0 0)
SF-TOGGLE "Flatten Image" FALSE

SF-COLOR "Rahmenfarbe außen" '(0 0 0)
SF-ADJUSTMENT "Breite des Rahmens" '(5 1 1000 1 10 0 1)
SF-COLOR "Rahmenfarbe innen" '(255 255 255)
SF-ADJUSTMENT "Breite des Rahmens" '(1 0 1000 1 10 0 1)
SF-OPTION "Rahmenausdehnung" (mapcar car '(
("keine" 0) ; none
("nach links" 1) ; left
("nach oben" 2) ; top
("nach rechts" 3) ; right
("nach unten" 4) ; bottom
("mittig horizontal" 5) ; horizontal
("mittig vertikal" 6) ; vertical
)
)
SF-ADJUSTMENT "Breite der Rahmenausdehnung" '(20 1 1000 1 10 0 1)
SF-OPTION "Rahmenbeschnitt" (mapcar car '(
("keinen" 0) ; none
("horizontal (oben und unten)" 1) ; horizontal (cut top and bottom border)
("vertikal (links und rechts)" 2) ; vertical (cut left and right border)
)
)
SF-TOGGLE "Rahmen innerhalb des Bildes anlegen. (Sichtbarer Bereich des Bildes wird kleiner!)" FALSE
SF-TOGGLE "Statt des äußeren Rahmens einen nach innen gesetzten unscharfen Glasrahmen verwenden." FALSE
SF-ADJUSTMENT "Unschärfe des Glasrahmens" '(20 0 100 1 10 0 0)

SF-STRING "Watermark text" "Frank Paukstat"
SF-FONT "Font" "Sans Italic"
SF-ADJUSTMENT "Size (pixels)" '(12 0 1000 5 10 0 1)
SF-OPTION "Location" '("Lower left" "Lower right" "Upper left" "Upper right")
SF-ADJUSTMENT "Opacity" '(100 0 100 5 10 0 1)

)


Ich habe schon nachgeschaut, aber es scheint kein Parameter doppelt vorzukommen, so das sich hier etwas beissen könnte. In zwei Scripten werden mitten im Code neue "define"-Zeilen geschrieben, kann das stören?

klaus_harrer
16.10.09, 06:40
Moin

Du kannst die Variable SF-IMAGE nicht einmal "img" und dam "image" nennen.


;Hell-/Dunkelbearbeitung
(define (script-fu-test img drawable parameter_von_image_bereich)

(script-fu-shadow-highlight img drawable shadows highlights shtw hitw blur InFlatten)

;Scalieren
(script-scale524 img drawable)

;Rahmen
(script-fu-photo-double-border-ae img drawable color1 border1 color2 border2 offset_type offset_width cut_type use_inside use_blur blur_strength)

;Copyright
(script-fu-watermark img drawable text font pixsize location opacity)


(gimp-displays-flush)
)

(script-fu-register "script-fu-test"
"<Image>/Script-Fu/Photo/Test"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"

SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Shadow Amount" '(100 0 100 1 1 0 0)
SF-ADJUSTMENT "Highlight Amount" '(50 0 100 1 1 0 0)
SF-ADJUSTMENT "Shadow Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Highlight Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Contrast Radius" '(25 1 49 1 1 0 0)
SF-TOGGLE "Flatten Image" FALSE

SF-COLOR "Rahmenfarbe außen" '(0 0 0)
SF-ADJUSTMENT "Breite des Rahmens" '(5 1 1000 1 10 0 1)
SF-COLOR "Rahmenfarbe innen" '(255 255 255)
SF-ADJUSTMENT "Breite des Rahmens" '(1 0 1000 1 10 0 1)
SF-OPTION "Rahmenausdehnung" (mapcar car '(
("keine" 0) ; none
("nach links" 1) ; left
("nach oben" 2) ; top
("nach rechts" 3) ; right
("nach unten" 4) ; bottom
("mittig horizontal" 5) ; horizontal
("mittig vertikal" 6) ; vertical
)
)
SF-ADJUSTMENT "Breite der Rahmenausdehnung" '(20 1 1000 1 10 0 1)
SF-OPTION "Rahmenbeschnitt" (mapcar car '(
("keinen" 0) ; none
("horizontal (oben und unten)" 1) ; horizontal (cut top and bottom border)
("vertikal (links und rechts)" 2) ; vertical (cut left and right border)
)
)
SF-TOGGLE "Rahmen innerhalb des Bildes anlegen. (Sichtbarer Bereich des Bildes wird kleiner!)" FALSE
SF-TOGGLE "Statt des äußeren Rahmens einen nach innen gesetzten unscharfen Glasrahmen verwenden." FALSE
SF-ADJUSTMENT "Unschärfe des Glasrahmens" '(20 0 100 1 10 0 0)

SF-STRING "Watermark text" "Frank Paukstat"
SF-FONT "Font" "Sans Italic"
SF-ADJUSTMENT "Size (pixels)" '(12 0 1000 5 10 0 1)
SF-OPTION "Location" '("Lower left" "Lower right" "Upper left" "Upper right")
SF-ADJUSTMENT "Opacity" '(100 0 100 5 10 0 1)

)


Bitte das Script genau ansehen. Alle Paramter die im Registerbereich liegen müssen sich in der Procedur "script-fu-test" wiederfinden SF-IMAGE = img u.s.w.

MfG
KLaus Harrer

B-52
16.10.09, 14:43
Du hast mir bis hierher schon gut auf die Sprünge geholfen, die "Erleuchtung" kam kurz vor dem Einschlafen und habe noch einmal alles überarbeitet um Argumente nicht doppelt oder mit unterschiedlicher Schreibweise zu haben. Das funktioniert auch soweit ganz gut. Dafür tut sich jetzt ein anderen Problem auf. Das später fertige Script soll das bearbeitete Bild auf width 800px skalieren, height soll dann automatisch sein. Bisher habe ich keine Anleitung oder gar Script gefunden die mir das erklärt. Gefunden hatte ich nur Anleitungen mit festen Werten für width und height und das hilft nicht weiter. Ich weis inzwischen das es mit "gimp-scale-to-size" gehen soll, aber wie ich das in ein Script packe ist mir noch schleierhaft.

Kannst Du mir da noch einmal helfen?

Edit: Jetzt geht alles bis hin zum skalieren, ein bischen wühlen hat mich wieder vorwärts gebracht. Nun das nächste: Das Script arbeitet alles bis zum skalieren einwandfrei ab. Wenn das Bild skaliert ist, wird es aber nicht mehr 1:1 angezeigt, ich müsste also einen Befehl einbauen der sowas wie "maximize image 100%" macht. Ich denke das daher der nächste Teil nicht abgearbeitet wwerden kann:



Plug-In Test2 left image undo in inconsistent state, closing open groups


Die zwei Fehlermeldung bezieht sich auf das eigendlich nachfolgende Script, welches einen schönen Rahmen um das Bild zeichnet. Das geht jedoch nur einwandfrei wenn es zu 100% maximiert (1:1 angezeigt) ist.

klaus_harrer
17.10.09, 12:23
Hallo B-52,

Der Fehler liegt daran das , das Bild nicht 1:1 angezeigt wird. Wenn du jedes Bild 1:1 angezeigt haben möchtest kannst dies in den Einstellungen tun.
Du solltest mal das akuelle Script posten damit ich eine Fehleranalyse machen kann.

MfG
Klaus Harrer

B-52
17.10.09, 13:04
Ich habe noch einmal gesucht. Die Fehlerkonsole zeigt beim abarbeiten des Script dann folgendes:

Test2 Warnung
Fehler beim Ausführen von
(script-fu-test2 3 13 100 50 1 1 25 FALSE '(0 0 0) 3 '(255 255 255) 1 0 20 0 FALSE FALSE 20 "FP" "Sans Italic" 12 0 100)

Error: eval: unbound variable: drawable

GIMP Warnung
Plug-In 'Test2' left image undo in inconsistent state, closing open undo groups.

Das passiert wenn es zu dem Punkt kommt wenn der Rahmen gezeichnet werden soll. Ich habe auch das entsprechende Script einzeln aufgerufen, es zeichnet den richtigen Rahmen auch bei Maßstab 25% korrekt, das war es also nicht. Hier das komplette Script so wie ich es derzeit habe:



;Automatische Bearbeitung am Stück
(define (script-fu-test2 img draw shadows highlights shtw hitw blur InFlatten color1 border1 color2 border2 offset_type offset_width cut_type use_inside use_blur blur_strength text font pixsize location opacity)


;============ Hell-/Dunkelbearbeitung mit unscharf maskieren =====================

(plug-in-unsharp-mask 1 img draw 0.5 0.1 0)
(plug-in-unsharp-mask 1 img draw 0.1 0.4 0)

;make shadow layer
(let ((shadows-layer (car (gimp-layer-copy draw 1))))
(gimp-drawable-set-name shadows-layer "Shadows")
(gimp-image-add-layer img shadows-layer -1)

;make it grey, blurred, inverted and set as overlay
(gimp-desaturate shadows-layer)
(plug-in-gauss-iir2 1 img shadows-layer blur blur)
(gimp-invert shadows-layer)
(gimp-layer-set-mode shadows-layer 5)

;copy shadow to highlight
(define highlights-layer (car (gimp-layer-copy shadows-layer 1)))
(gimp-drawable-set-name highlights-layer "Highlights")
(gimp-image-add-layer img highlights-layer -1)

;process the shadows layer
(gimp-levels shadows-layer 0 0 255 shtw 0 255)
(plug-in-colortoalpha 1 img shadows-layer '(0 0 0))
(gimp-layer-set-opacity shadows-layer shadows)

;process the highlights layer
(gimp-levels highlights-layer 0 0 255 hitw 0 255)
(plug-in-colortoalpha 1 img highlights-layer '(255 255 255))
(gimp-layer-set-opacity highlights-layer highlights)

; Flatten the image, if needed.
(cond
((= InFlatten TRUE)
(begin(gimp-image-merge-visible-layers image 0))
)

(gimp-displays-flush)

)

;======================== Scalieren ====================

; (gimp-image-undo-group-start img)
(gimp-image-flatten img)
(let* (
(width (car (gimp-image-width img)))
(height (car (gimp-image-height img)))
(scale (/ 800 (max height width)))
(width (* scale width))
(height (* scale height))
(draw (car (gimp-image-get-active-drawable img)))
)
; (plug-in-unsharp-mask 1 img draw 0.5 1.5 0)
(gimp-image-scale img width height)
; (gimp-image-undo-group-end img)
(gimp-brightness-contrast draw 10 20)
(gimp-hue-saturation draw 0 0 0 10)
(plug-in-unsharp-mask 1 img draw 0.1 0.7 0)

)


;====================== Rahmen =============================

(let*
(
(saveForegroundColor (car (gimp-context-get-foreground)))
(imgWidth (car (gimp-image-width img)))
(imgHeight (car (gimp-image-height img)))

(newWidth)
(newHeight)
(selectWidth1)
(selectHeight1)
(selectWidth2)
(selectHeight2)
(xPos 0)
(yPos 0)

(newLayer)
)

; ---------------------------------------------------------------
(gimp-undo-push-group-start img)
; ---------------------------------------------------------------

; check inputs
(if (= use_blur TRUE)
(set! use_inside TRUE)
)

; ---------------------------------------------------------------

; convert gray/indexed images to rgb color
(if (= (car (gimp-drawable-is-rgb drawable)) FALSE)
(gimp-image-convert-rgb img)
)

; calc new size
(set! newWidth (+ imgWidth (* 2 border1) (* 2 border2)))
(set! newHeight (+ imgHeight (* 2 border1) (* 2 border2)))

; calc selects for outside or inside border
(if (= use_inside FALSE)
; border outside
(begin
(set! selectWidth1 (+ imgWidth (* 2 border2)))
(set! selectHeight1 (+ imgHeight (* 2 border2)))
(set! selectWidth2 imgWidth)
(set! selectHeight2 imgHeight)
)

; border inside
(begin
(set! selectWidth1 (- imgWidth (* 2 border1)))
(set! selectHeight1 (- imgHeight (* 2 border1)))
(set! selectWidth2 (- imgWidth (* 2 border1) (* 2 border2)))
(set! selectHeight2 (- imgHeight (* 2 border1) (* 2 border2)))
)
)

; calc resize position
(set! xPos (+ border1 border2))
(set! yPos (+ border1 border2))

; correct new size and resize position for offset_width
(if (= offset_type 1) ; left
(begin
(set! newWidth (+ newWidth offset_width))
(set! xPos (+ xPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 offset_width))
(set! selectWidth2 (- selectWidth2 offset_width))
)
)
)
)
(if (= offset_type 2) ; top
(begin
(set! newHeight (+ newHeight offset_width))
(set! yPos (+ yPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 offset_width))
(set! selectHeight2 (- selectHeight2 offset_width))
)
)
)
)
(if (= offset_type 3) ; right
(begin
(set! newWidth (+ newWidth offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 offset_width))
(set! selectWidth2 (- selectWidth2 offset_width))
)
)
)
)
(if (= offset_type 4) ; bottom
(begin
(set! newHeight (+ newHeight offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 offset_width))
(set! selectHeight2 (- selectHeight2 offset_width))
)
)
)
)
(if (= offset_type 5) ; horizontal
(begin
(set! newWidth (+ newWidth (* 2 offset_width)))
(set! xPos (+ xPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 (* 2 offset_width)))
(set! selectWidth2 (- selectWidth2 (* 2 offset_width)))
)
)
)
)
(if (= offset_type 6) ; vertical
(begin
(set! newHeight (+ newHeight (* 2 offset_width)))
(set! yPos (+ yPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 (* 2 offset_width)))
(set! selectHeight2 (- selectHeight2 (* 2 offset_width)))
)
)
)
)

; ---------------------------------------------------------------

; resize to new size
(if (= use_inside FALSE)
(gimp-image-resize img newWidth newHeight xPos yPos)
)

; clear selection
(gimp-selection-none img)

; create new layer
(if (= use_blur FALSE)
; color border
(begin
(set! newLayer
(car
(gimp-layer-new
img
(car (gimp-image-width img))
(car (gimp-image-height img))
RGBA-IMAGE
"Border"
100
NORMAL
)
)
)
(gimp-image-add-layer img newLayer -1)
(gimp-drawable-fill newLayer TRANSPARENT-FILL)
)

; blur border
(begin
(set! newLayer (car (gimp-layer-copy draw TRUE)))
(gimp-drawable-set-name newLayer "Border")
(gimp-layer-set-opacity newLayer 100)
(gimp-image-add-layer img newLayer -1)

; Gaußscher Weichzeichner
(if (> blur_strength 0)
(plug-in-gauss-rle 1 img newLayer blur_strength 1 1)
)
)
)

; ---------------------------------------------------------------

; create rectangle selection 1
(gimp-rect-select
img
(- xPos border2)
(- yPos border2)
selectWidth1
selectHeight1
0 ;operation
0 ;feather
0 ;feather-radius
)

; creat border color or blur
(if (= use_blur FALSE)
; use color Border
(begin
; invert selection 1
(gimp-selection-invert img)

; set foreground color to color1
(gimp-context-set-foreground color1)

; fill selection 1 with color1
(gimp-edit-fill newLayer FOREGROUND-FILL)
)

; use blur border
(begin
; cut selection
(gimp-edit-cut newLayer)
)
)

; clear selection
(gimp-selection-none img)

; ---------------------------------------------------------------

; create border 2
(if (> border2 0)
(begin
; create rectangle selection 2
(gimp-rect-select
img
(- xPos border2)
(- yPos border2)
selectWidth1
selectHeight1
0 ;operation
0 ;feather
0 ;feather-radius
)

(gimp-rect-select
img
xPos
yPos
selectWidth2
selectHeight2
1 ;operation
0 ;feather
0 ;feather-radius
)

; set foreground color to color2
(gimp-context-set-foreground color2)

; fill selection 2 with color2
(gimp-edit-fill newLayer FOREGROUND-FILL)
(gimp-selection-clear img)
)
)

; ---------------------------------------------------------------

; cut borders to new image size
(if (= cut_type 1) ; horizontal
(begin
(if (= use_inside FALSE)
; outside
(gimp-image-resize img newWidth imgHeight 0 (- yPos))

; inside
(gimp-image-resize img imgWidth selectHeight2 0 (- yPos))
)

; cut (resize)
(gimp-layer-resize-to-image-size newLayer)
)
)
(if (= cut_type 2) ; vertical
(begin
(if (= use_inside FALSE)
; outside
(gimp-image-resize img imgWidth newHeight (- xPos) 0)

; inside
(gimp-image-resize img selectWidth2 imgHeight (- xPos) 0)
)

; cut (resize)
(gimp-layer-resize-to-image-size newLayer)
)
)

; ---------------------------------------------------------------

; restore colors
(gimp-context-set-foreground saveForegroundColor)

; ---------------------------------------------------------------
(gimp-undo-push-group-end img)
; ---------------------------------------------------------------

; display result
(gimp-displays-flush img)

; return values
(list img drawable newLayer)
)

;=============================== Watermark ============================

(let*

; Save the foreground color

((old-fg (car (gimp-palette-get-foreground))))

; Set the foreground color to white

(gimp-palette-set-foreground '(140 140 140))

(let*

; Set the X and Y locations offset by 10 pixels from the chosen corner

((imagewid (car (gimp-image-width image)))
(imagehgt (car (gimp-image-height image)))

(ytext
(cond ((<= location 1) (- (- imagehgt pixsize) 10))
((>= location 2) 0)))

(textwid (car (gimp-text-get-extents-fontname text pixsize 0 font)))

(xtext
(cond ((= (fmod location 2) 0) 10)
((= (fmod location 2) 1) (- (- imagewid textwid) 10))))

; Create a layer with the watermark text

(tlayer (car (gimp-text-fontname image -1 xtext ytext text -1 TRUE
pixsize 0 font))))

; Bump map the watermark layer

(plug-in-bump-map 1 image tlayer tlayer 135 45 3 0 0 0 0 1 0 0)

; Set the opacity of the watermark layer

(gimp-layer-set-opacity tlayer opacity)

; Combine the original image layer and the watermark layer

(gimp-image-flatten image)
)

; Restore the old foreground color

(gimp-palette-set-foreground old-fg)
)


(gimp-displays-flush)))


(script-fu-register "script-fu-test2"
"<Image>/Script-Fu/Photo/Test2"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"

;============ Helldunkel-Bearbeitung =================

SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Shadow Amount" '(100 0 100 1 1 0 0)
SF-ADJUSTMENT "Highlight Amount" '(50 0 100 1 1 0 0)
SF-ADJUSTMENT "Shadow Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Highlight Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Contrast Radius" '(25 1 49 1 1 0 0)
SF-TOGGLE "Flatten Image" FALSE

;============== Rahmen ===============================

SF-COLOR "Rahmenfarbe außen" '(0 0 0)
SF-ADJUSTMENT "Breite des Rahmens" '(3 1 1000 1 10 0 1)
SF-COLOR "Rahmenfarbe innen" '(255 255 255)
SF-ADJUSTMENT "Breite des Rahmens" '(1 0 1000 1 10 0 1)
SF-OPTION "Rahmenausdehnung" (mapcar car '(
("keine" 0) ; none
("nach links" 1) ; left
("nach oben" 2) ; top
("nach rechts" 3) ; right
("nach unten" 4) ; bottom
("mittig horizontal" 5) ; horizontal
("mittig vertikal" 6) ; vertical
)
)
SF-ADJUSTMENT "Breite der Rahmenausdehnung" '(20 1 1000 1 10 0 1)
SF-OPTION "Rahmenbeschnitt" (mapcar car '(
("keinen" 0) ; none
("horizontal (oben und unten)" 1) ; horizontal (cut top and bottom border)
("vertikal (links und rechts)" 2) ; vertical (cut left and right border)
)
)
SF-TOGGLE "Rahmen innerhalb des Bildes anlegen. (Sichtbarer Bereich des Bildes wird kleiner!)" FALSE
SF-TOGGLE "Statt des äußeren Rahmens einen nach innen gesetzten unscharfen Glasrahmen verwenden." FALSE
SF-ADJUSTMENT "Unschärfe des Glasrahmens" '(20 0 100 1 10 0 0)

;===================== Watermark =====================

SF-STRING "Watermark text" "FP"
SF-FONT "Font" "Sans Italic"
SF-ADJUSTMENT "Size (pixels)" '(12 0 1000 5 10 0 1)
SF-OPTION "Location" '("Lower left" "Lower right" "Upper left" "Upper right")
SF-ADJUSTMENT "Opacity" '(100 0 100 5 10 0 1)

)

klaus_harrer
17.10.09, 13:42
Hallo B-52,

Leider muss ich festellen das du das ganze immer noch nicht begriffen hast. Du hast dir die von mir geschickten Links gar nicht angesehen.
Was du gemacht hast, du hast die kompletten Scripte in ein kopiert. Was völlig Schwachsinnig ist da die Scripte in deiner PDB schon gibt.
Dadurch verlierst du den Überblick über dein Script.
Ich möchte dich bitten dir das Tutorial "Grundlagen" anzuschauen.

Hier noch ein mal ein Versuch das Script zu debuggen.



(define (script-fu-test2 img draw shadows highlights shtw hitw blur InFlatten color1 border1 color2 border2 offset_type offset_width cut_type use_inside use_blur blur_strength text font pixsize location opacity)


;============ Hell-/Dunkelbearbeitung mit unscharf maskieren =====================

(plug-in-unsharp-mask 1 img draw 0.5 0.1 0)
(plug-in-unsharp-mask 1 img draw 0.1 0.4 0)

;make shadow layer
(let ((shadows-layer (car (gimp-layer-copy draw 1))))
(gimp-drawable-set-name shadows-layer "Shadows")
(gimp-image-add-layer img shadows-layer -1)

;make it grey, blurred, inverted and set as overlay
(gimp-desaturate shadows-layer)
(plug-in-gauss-iir2 1 img shadows-layer blur blur)
(gimp-invert shadows-layer)
(gimp-layer-set-mode shadows-layer 5)

;copy shadow to highlight
(define highlights-layer (car (gimp-layer-copy shadows-layer 1)))
(gimp-drawable-set-name highlights-layer "Highlights")
(gimp-image-add-layer img highlights-layer -1)

;process the shadows layer
(gimp-levels shadows-layer 0 0 255 shtw 0 255)
(plug-in-colortoalpha 1 img shadows-layer '(0 0 0))
(gimp-layer-set-opacity shadows-layer shadows)

;process the highlights layer
(gimp-levels highlights-layer 0 0 255 hitw 0 255)
(plug-in-colortoalpha 1 img highlights-layer '(255 255 255))
(gimp-layer-set-opacity highlights-layer highlights)

; Flatten the image, if needed.
(cond
((= InFlatten TRUE)
(begin(gimp-image-merge-visible-layers image 0))
)

(gimp-displays-flush)

)

;======================== Scalieren ====================

; (gimp-image-undo-group-start img)
(gimp-image-flatten img)
(let* (
(width (car (gimp-image-width img)))
(height (car (gimp-image-height img)))
(scale (/ 800 (max height width)))
(width (* scale width))
(height (* scale height))
(draw (car (gimp-image-get-active-drawable img)))
)
; (plug-in-unsharp-mask 1 img draw 0.5 1.5 0)
(gimp-image-scale img width height)
; (gimp-image-undo-group-end img)
(gimp-brightness-contrast draw 10 20)
(gimp-hue-saturation draw 0 0 0 10)
(plug-in-unsharp-mask 1 img draw 0.1 0.7 0)

)


;====================== Rahmen =============================

(let*
(
(saveForegroundColor (car (gimp-context-get-foreground)))
(imgWidth (car (gimp-image-width img)))
(imgHeight (car (gimp-image-height img)))

(newWidth)
(newHeight)
(selectWidth1)
(selectHeight1)
(selectWidth2)
(selectHeight2)
(xPos 0)
(yPos 0)

(newLayer)
)

; ---------------------------------------------------------------
; (gimp-undo-push-group-start img)
; ---------------------------------------------------------------

; check inputs
(if (= use_blur TRUE)
(set! use_inside TRUE)
)

; ---------------------------------------------------------------

; convert gray/indexed images to rgb color
(if (= (car (gimp-drawable-is-rgb draw)) FALSE)
(gimp-image-convert-rgb img)
)

; calc new size
(set! newWidth (+ imgWidth (* 2 border1) (* 2 border2)))
(set! newHeight (+ imgHeight (* 2 border1) (* 2 border2)))

; calc selects for outside or inside border
(if (= use_inside FALSE)
; border outside
(begin
(set! selectWidth1 (+ imgWidth (* 2 border2)))
(set! selectHeight1 (+ imgHeight (* 2 border2)))
(set! selectWidth2 imgWidth)
(set! selectHeight2 imgHeight)
)

; border inside
(begin
(set! selectWidth1 (- imgWidth (* 2 border1)))
(set! selectHeight1 (- imgHeight (* 2 border1)))
(set! selectWidth2 (- imgWidth (* 2 border1) (* 2 border2)))
(set! selectHeight2 (- imgHeight (* 2 border1) (* 2 border2)))
)
)

; calc resize position
(set! xPos (+ border1 border2))
(set! yPos (+ border1 border2))

; correct new size and resize position for offset_width
(if (= offset_type 1) ; left
(begin
(set! newWidth (+ newWidth offset_width))
(set! xPos (+ xPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 offset_width))
(set! selectWidth2 (- selectWidth2 offset_width))
)
)
)
)
(if (= offset_type 2) ; top
(begin
(set! newHeight (+ newHeight offset_width))
(set! yPos (+ yPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 offset_width))
(set! selectHeight2 (- selectHeight2 offset_width))
)
)
)
)
(if (= offset_type 3) ; right
(begin
(set! newWidth (+ newWidth offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 offset_width))
(set! selectWidth2 (- selectWidth2 offset_width))
)
)
)
)
(if (= offset_type 4) ; bottom
(begin
(set! newHeight (+ newHeight offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 offset_width))
(set! selectHeight2 (- selectHeight2 offset_width))
)
)
)
)
(if (= offset_type 5) ; horizontal
(begin
(set! newWidth (+ newWidth (* 2 offset_width)))
(set! xPos (+ xPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectWidth1 (- selectWidth1 (* 2 offset_width)))
(set! selectWidth2 (- selectWidth2 (* 2 offset_width)))
)
)
)
)
(if (= offset_type 6) ; vertical
(begin
(set! newHeight (+ newHeight (* 2 offset_width)))
(set! yPos (+ yPos offset_width))

; corrections for inside border
(if (= use_inside TRUE)
(begin
(set! selectHeight1 (- selectHeight1 (* 2 offset_width)))
(set! selectHeight2 (- selectHeight2 (* 2 offset_width)))
)
)
)
)

; ---------------------------------------------------------------

; resize to new size
(if (= use_inside FALSE)
(gimp-image-resize img newWidth newHeight xPos yPos)
)

; clear selection
(gimp-selection-none img)

; create new layer
(if (= use_blur FALSE)
; color border
(begin
(set! newLayer
(car
(gimp-layer-new
img
(car (gimp-image-width img))
(car (gimp-image-height img))
RGBA-IMAGE
"Border"
100
NORMAL
)
)
)
(gimp-image-add-layer img newLayer -1)
(gimp-drawable-fill newLayer TRANSPARENT-FILL)
)

; blur border
(begin
(set! newLayer (car (gimp-layer-copy draw TRUE)))
(gimp-drawable-set-name newLayer "Border")
(gimp-layer-set-opacity newLayer 100)
(gimp-image-add-layer img newLayer -1)

; Gaußscher Weichzeichner
(if (> blur_strength 0)
(plug-in-gauss-rle 1 img newLayer blur_strength 1 1)
)
)
)

; ---------------------------------------------------------------

; create rectangle selection 1
(gimp-rect-select
img
(- xPos border2)
(- yPos border2)
selectWidth1
selectHeight1
0 ;operation
0 ;feather
0 ;feather-radius
)

; creat border color or blur
(if (= use_blur FALSE)
; use color Border
(begin
; invert selection 1
(gimp-selection-invert img)

; set foreground color to color1
(gimp-context-set-foreground color1)

; fill selection 1 with color1
(gimp-edit-fill newLayer FOREGROUND-FILL)
)

; use blur border
(begin
; cut selection
(gimp-edit-cut newLayer)
)
)

; clear selection
(gimp-selection-none img)

; ---------------------------------------------------------------

; create border 2
(if (> border2 0)
(begin
; create rectangle selection 2
(gimp-rect-select
img
(- xPos border2)
(- yPos border2)
selectWidth1
selectHeight1
0 ;operation
0 ;feather
0 ;feather-radius
)

(gimp-rect-select
img
xPos
yPos
selectWidth2
selectHeight2
1 ;operation
0 ;feather
0 ;feather-radius
)

; set foreground color to color2
(gimp-context-set-foreground color2)

; fill selection 2 with color2
(gimp-edit-fill newLayer FOREGROUND-FILL)
(gimp-selection-clear img)
)
)

; ---------------------------------------------------------------

; cut borders to new image size
(if (= cut_type 1) ; horizontal
(begin
(if (= use_inside FALSE)
; outside
(gimp-image-resize img newWidth imgHeight 0 (- yPos))

; inside
(gimp-image-resize img imgWidth selectHeight2 0 (- yPos))
)

; cut (resize)
(gimp-layer-resize-to-image-size newLayer)
)
)
(if (= cut_type 2) ; vertical
(begin
(if (= use_inside FALSE)
; outside
(gimp-image-resize img imgWidth newHeight (- xPos) 0)

; inside
(gimp-image-resize img selectWidth2 imgHeight (- xPos) 0)
)

; cut (resize)
(gimp-layer-resize-to-image-size newLayer)
)
)

; ---------------------------------------------------------------

; restore colors
(gimp-context-set-foreground saveForegroundColor)

; ---------------------------------------------------------------
;(gimp-undo-push-group-end img)
; ---------------------------------------------------------------

; display result
(gimp-displays-flush img)

; return values
(list img drawable newLayer)
)

;=============================== Watermark ============================

(let*

; Save the foreground color

((old-fg (car (gimp-palette-get-foreground))))

; Set the foreground color to white

(gimp-palette-set-foreground '(140 140 140))

(let*

; Set the X and Y locations offset by 10 pixels from the chosen corner

((imagewid (car (gimp-image-width image)))
(imagehgt (car (gimp-image-height image)))

(ytext
(cond ((<= location 1) (- (- imagehgt pixsize) 10))
((>= location 2) 0)))

(textwid (car (gimp-text-get-extents-fontname text pixsize 0 font)))

(xtext
(cond ((= (fmod location 2) 0) 10)
((= (fmod location 2) 1) (- (- imagewid textwid) 10))))

; Create a layer with the watermark text

(tlayer (car (gimp-text-fontname image -1 xtext ytext text -1 TRUE
pixsize 0 font))))

; Bump map the watermark layer

(plug-in-bump-map 1 image tlayer tlayer 135 45 3 0 0 0 0 1 0 0)

; Set the opacity of the watermark layer

(gimp-layer-set-opacity tlayer opacity)

; Combine the original image layer and the watermark layer

(gimp-image-flatten image)
)

; Restore the old foreground color

(gimp-palette-set-foreground old-fg)
)


(gimp-displays-flush)))


(script-fu-register "script-fu-test2"
"<Image>/Script-Fu/Photo/Test2"
"Test zur automatischen Abarbeitung von mehreren Scripten"
"FP"
"Copyright 2009, FP"
"11/01/07"
"RGB RGBA"

;============ Helldunkel-Bearbeitung =================

SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Shadow Amount" '(100 0 100 1 1 0 0)
SF-ADJUSTMENT "Highlight Amount" '(50 0 100 1 1 0 0)
SF-ADJUSTMENT "Shadow Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Highlight Tonal width" '(1 0.3 1.7 0.1 0.1 1 0)
SF-ADJUSTMENT "Contrast Radius" '(25 1 49 1 1 0 0)
SF-TOGGLE "Flatten Image" FALSE

;============== Rahmen ===============================

SF-COLOR "Rahmenfarbe außen" '(0 0 0)
SF-ADJUSTMENT "Breite des Rahmens" '(3 1 1000 1 10 0 1)
SF-COLOR "Rahmenfarbe innen" '(255 255 255)
SF-ADJUSTMENT "Breite des Rahmens" '(1 0 1000 1 10 0 1)
SF-OPTION "Rahmenausdehnung" (mapcar car '(
("keine" 0) ; none
("nach links" 1) ; left
("nach oben" 2) ; top
("nach rechts" 3) ; right
("nach unten" 4) ; bottom
("mittig horizontal" 5) ; horizontal
("mittig vertikal" 6) ; vertical
)
)
SF-ADJUSTMENT "Breite der Rahmenausdehnung" '(20 1 1000 1 10 0 1)
SF-OPTION "Rahmenbeschnitt" (mapcar car '(
("keinen" 0) ; none
("horizontal (oben und unten)" 1) ; horizontal (cut top and bottom border)
("vertikal (links und rechts)" 2) ; vertical (cut left and right border)
)
)
SF-TOGGLE "Rahmen innerhalb des Bildes anlegen. (Sichtbarer Bereich des Bildes wird kleiner!)" FALSE
SF-TOGGLE "Statt des äußeren Rahmens einen nach innen gesetzten unscharfen Glasrahmen verwenden." FALSE
SF-ADJUSTMENT "Unschärfe des Glasrahmens" '(20 0 100 1 10 0 0)

;===================== Watermark =====================

SF-STRING "Watermark text" "FP"
SF-FONT "Font" "Sans Italic"
SF-ADJUSTMENT "Size (pixels)" '(12 0 1000 5 10 0 1)
SF-OPTION "Location" '("Lower left" "Lower right" "Upper left" "Upper right")
SF-ADJUSTMENT "Opacity" '(100 0 100 5 10 0 1)

)


MfG
Klaus Harrer

B-52
17.10.09, 16:23
Unabhängig davon ob ich alles in ein Script packe oder nicht, es kam das gleiche raus. Nur das Fehler bereits früher auftraten. Ich möchte einfach alles in ein Script und nicht zum Schluß 5 oder mehr einzelne Scripte installiert haben, so einfach ist das. Und den Überblick behalte ich durch die Kommentafunktion. Und nebenbei habe ich die Links gelesen, danke für die Unterstellung. Diese Scriptsprache ist für mich unverständlich, es soll Menschen geben die nicht stundenlang sich damit beschäftigen. Dafür kann ich eine uralte Zilog Z80-CPU programmieren, was Dir sicherlich Probleme bereiten würde. So, nachdem wir nun lauter Nettigkeiten ausgetauscht haben: Wo war mein Denkfehler? Die Frage hast Du leider bisher nicht beantwortet.

Ich habe Dein überarbeitet Script einmal durchlaufen lassen, Ausgabe der Fehlerkonsole:

Fehler beim Ausführen von
(script-fu-test2 1 2 75 50 1 1 25 FALSE '(0 0 0) 3 '(255 255 255) 1 0 20 0 FALSE FALSE 20 "FP" "Sans Italic" 12 0 100)

Error: Procedure execution of gimp-drawable-is-rgb failed on invalid input arguments

Scheinbar ist es egal ob


(if (= (car (gimp-drawable-is-rgb draw)) FALSE)


oder



(if (= (car (gimp-drawable-is-rgb drawable)) FALSE)


lautet. Soweit war ich auch schon ;) Das ist mir ehrlich gesagt zu hoch.