PDA

Vollständige Version anzeigen : Skript Variablen werden nicht registriert


DerSteffen
08.03.2007, 18:52
Hallo,

ich bastel mir gerade ein Skript mit dem ich Bilder skalieren kann. Später soll noch die Schärfung dazu kommen. Nachdem ich den Code von überflüssigem Ballast befreit habe funktioniert es leider nicht mehr wie gewünscht. Ich glaube es liegt an den Zeilen mit den gekennzeichneten Stellen ("#####"), aber ich komme nicht dahinter wie ich das korregieren kann.


(define (script-fu-batch-resize inImg inX inY inQualitaet inGlaettung inOptimieren)
;#####Teil1
(define (theImgDateien theAnzahl theDatei)
(let* (
(fname (car theDatei))
(img (car (gimp-file-load 1 fname fname)))
)
)
;#####Teil1 ende
(gimp-image-undo-disable img)
;/////skalieren
;versuchen mit if abfrage zu erstellen um quer und hochformat zu unterscheiden, damit kann man dann auch hochformat problemlos mit querformat erstellen
(gimp-drawable-transform-scale (car (gimp-image-get-active-drawable img)) 0 0 inX inY 0 2 1 3 0)
;/////ende skalieren

;/////speichern
(file-jpeg-save 1 img (car (gimp-image-get-active-drawable img)) (string-append fname "_1scheme123456.jpg") (string-append fname "_automatisch.jpg") (/ inQualitaet 100) 1 1 0 "" 2 1 0 2)
;/////ende speichern
(gimp-image-delete img)
)
;//ende Main-Funktionsdefinition
;//ausführbarer Bereich
;#####Teil2
(if (= theAnzahl 1) 1 (theImageDateien (- theAnzahl 1) (cdr theDatei)))
(set! files (file-glob inImg 0))
(theImageDateien (car files) (car (cdr files))))
;#####Teil2 ende
;//ende ausführbarer Bereich

; Im GIMP und im Menü registrieren
(script-fu-register "script-fu-batch-resize"
"<Toolbox>/Xtns/Script-Fu/homepage/skalieren..."
"Mehrere Bilder auf einmal auf die gleiche Größe bringen. Erweiterungen: Nur JPEG-Speicherung, JPEG-Parameter einstellbar, Skallierungseinstellungen"
"Original: Richard Hirner, Petr Andreev ---Erweitert: Steffen Schnur"
"Original: 2006, Richard Hirner, Petr Andreev ---Erweitert: 2007, Steffen Schnur"
"Mar 8, 2007"
""
SF-FILENAME "Platzhalter (*) zulaessig" ".jpg"
SF-VALUE "Neue horizontale Größe" "600"
SF-VALUE "Neue vertikale Größe" "400"
SF-ADJUSTMENT "JPEG-Qualitaet" '(98 1 100 1 10 1 0)
SF-ADJUSTMENT "Glaettung" '(0.0 0.0 1 0.1 0.1 1 0)
SF-TOGGLE "Optimieren (keine Funktion)" 1
)



Die If Schleife sollte eigentlich dafür sorgen das fals im Dateinamen ein * angegeben wurde alle Dateien im Verzeichnis verkleinert und unter neuem Namen gespeichert werden.

Evtl. hat ja jemand noch eine Idee.

Viele Grüße

Steffen

DerSteffen
13.03.2007, 13:52
Fehler gefunden, nach etlichen Stunden/Tagen, warum Dies und Jenes nicht funktioniert, habe ich jetzt festgesellt das ich z. B.: statt gimp_image_get_name (wie es im Prozedur-Browser steht) gimp-image-get-name notieren muss. :cool:


Hi,

ich sitze immer noch dran, bin aber nicht viel weitergekommen :sad:

Jetzt habe ich das Problem, dass ich den Dateinamen nicht aus der theImg-Variablen bekomme. (rot markiert)

Für mich sieht das nicht auffällig aus, aber es funktioniert nicht. Ich habe es auch schon mit "gimp_image_get_name" versucht.


(define (script-fu-batch-resize inImg inImgVorName inX inY inQualitaet inGlaettung inOptimieren)
(let* (
(theImg (car (gimp-file-load 1 inImg inImg)))
(theImgName (gimp_image_get_filename theImg))
(theImgNameNoExtension (car (strbreakup theImgName ".jpg"))) ;trennt das ".jpg" dateinamen und erzeugt eine liste, deren anfang mit car ausgegeben wird
(theImgRoot (car (strbreakup inImg theImgName))) ;trennt den dateinamen vom pfad und erzeugt eine liste, deren anfang mit car ausgegeben wird
(theImgNew (string-append theImgRoot inImgVorName theImgNameNoExtension "_" (number->string inX) (number->string inY) ".jpg"))
(theImgDraw (car (gimp-image-get-active-drawable theImg)))
(theImgQuali (/ inQualitaet 100))
)

;/////skalieren
(gimp-drawable-transform-scale theImgDraw 0 0 inX inY 0 2 1 3 0)
;/////ende skalieren
;/////speichern
(file-jpeg-save 1 theImg theImgDraw theImgNew theImgNew theImgQuali 1 1 0 "" 2 1 0 2)
;/////ende speichern
(gimp-image-delete theImg)
;//ausführbarer Bereich
; (if (= theAnzahl 1) 1 (theImgDateien (- theAnzahl 1) (cdr theDatei)))

; (set! files (file-glob inImg 0))
; (theImgDateien (car files) (car (cdr files)))
;//ende ausführbarer Bereich
)
)

;registrieren
(script-fu-register "script-fu-batch-resize"
"<Toolbox>/Xtns/Script-Fu/homepage/skalieren..."
"Mehrere Bilder auf einmal auf die gleiche Größe bringen. Erweiterungen: Nur JPEG-Speicherung, JPEG-Parameter einstellbar, Skallierungseinstellungen"
"Original: Richard Hirner, Petr Andreev ---Erweitert: Steffen Schnur"
"Original: 2006, Richard Hirner, Petr Andreev ---Erweitert: 2007, Steffen Schnur"
"Mar 13, 2007"
""
SF-FILENAME "Platzhalter (*) zulaessig" ".jpg"
SF-STRING "Vor Dateinamen setzen (Bsp. neu_Bildname.jpg)" "neu_"
SF-VALUE "Neue horizontale Größe" "600"
SF-VALUE "Neue vertikale Größe" "400"
SF-ADJUSTMENT "JPEG-Qualitaet" '(98 1 100 1 10 1 0)
SF-ADJUSTMENT "Glaettung" '(0.0 0.0 1 0.1 0.1 1 0)
SF-TOGGLE "Optimieren (keine Funktion)" 1
)


Fals jemand eine Idee hat :confused:

Viele Grüße

Steffen

DerSteffen
16.03.2007, 03:04
Hat lange gedauert und gibt sicher 100 bessere Skripte für die Aufgabe, aber ich habe mich mit der Skriptsprache etwas auseinander setzten können und kann jetzt kleine Batch-Vorgänge für Gimp erstellen.

Hier ist das Skript, wie ich es mir vorgestellt habe (Funktioniert auf Windows mit Gimp 2.2):

(define (script-fu-batch-resize-extend inImg inImgVorName inX1 inY1 inStaerke1 inAkti2 inX2 inY2 inStaerke2 inAkti3 inX3 inY3 inStaerke3 inQualitaet inGlaettung inOptimieren)
(define (funcSkalieren n f theX theY theStaerke)
(let* ( ;let1
(theImgFile (car f))
(theImg (car (gimp-file-load 1 theImgFile theImgFile)))
(theImgName (car (gimp-image-get-name theImg)))
(theImgNameNoExtension (car (strbreakup theImgName ".jpg"))) ;trennt das ".jpg" dateinamen und erzeugt eine liste, deren anfang mit car ausgegeben wird
(theImgRoot (car (strbreakup theImgFile theImgName))) ;trennt den dateinamen vom pfad und erzeugt eine liste, deren anfang mit car ausgegeben wird
(theImgNew (string-append theImgRoot inImgVorName theImgNameNoExtension "_" (number->string theX) (number->string theY) ".jpg"))
(theImgDraw (car (gimp-image-get-active-drawable theImg)))
(theImgQuali (/ inQualitaet 100))
(theOrgX (car (gimp-image-width theImg))) ;Bildmaße ermitteln
(theOrgY (car (gimp-image-height theImg)))
)
;/////skalieren
(if (> theOrgX theOrgY) ;Hochformat von Querformat unterscheiden
(gimp-drawable-transform-scale theImgDraw 0 0 theX theY 0 2 1 3 0)
;else
(gimp-drawable-transform-scale theImgDraw 0 0 theY theX 0 2 1 3 0)
)
;/////ende skalieren
;/////Schärfen
(let* (;let2
(theCopyLayer (car (gimp-layer-copy theImgDraw TRUE)))
)
(gimp-image-add-layer theImg theCopyLayer -1)
(plug-in-laplace 1 theImg theCopyLayer)
(if (> theStaerke 0) ;wenn Stärke 0 gewählt, muss der Gausche Weichzeichner nicht durchlaufen werden
(plug-in-gauss-iir2 1 theImg theCopyLayer theStaerke theStaerke)
)
(gimp-layer-set-mode theCopyLayer DIFFERENCE-MODE)
(gimp-image-merge-down theImg theCopyLayer CLIP-TO-IMAGE)

;/////ende Schärfen
;/////speichern
(if (= inOptimieren TRUE)
(set! theOptimieren 1)
;else
(set! theOptimieren 0)
)
(set! theImgDraw (car (gimp-image-get-active-drawable theImg)))
(file-jpeg-save 1 theImg theImgDraw theImgNew theImgNew theImgQuali inGlaettung theOptimieren 0 "" 2 1 0 2)
; debug fals jpeg speicherung nicht geht(gimp-file-save 1 theImg (car (gimp-image-get-active-drawable theImg)) theImgFile theImgFile)
;/////ende speichern
(gimp-image-delete theImg)
(if (= n 1) 1 (funcSkalieren (- n 1) (cdr f) theX theY theStaerke))
);let2
);let1
);define funcSkalieren
;//ausführbarer Bereich
(set! files (file-glob inImg 0))
(funcSkalieren (car files) (car (cdr files)) inX1 inY1 inStaerke1) ;Bild Ausgabe 1 wird immer durchlaufen
(if (= inAkti2 TRUE)
(funcSkalieren (car files) (car (cdr files)) inX2 inY2 inStaerke2) ;Bild Ausgabe 2 wird nur durchlaufen, wenn "Zusaetzliche Ausgabe" gewählt
)
(if (= inAkti3 TRUE)
(funcSkalieren (car files) (car (cdr files)) inX3 inY3 inStaerke3) ;Bild Ausgabe 2 wird nur durchlaufen, wenn "Zusaetzliche Ausgabe" gewählt
)

;//ende ausführbarer Bereich

)
;registrieren
(script-fu-register "script-fu-batch-resize-extend"
"<Toolbox>/Xtns/Script-Fu/homepage/skalieren..."
"Mehrere Bilder auf einmal auf die gleiche Groesse bringen. Erweiterungen: Nur JPEG-Verarbeitung, JPEG-Parameter einstellbar, Skalierungseinstellungen, Kantenschaerfung ---Es kann ein einzelnes Bild ausgewaehlt werden, oder ein ganzer Ordner. Dann sucht man mit nach dem klick auf Durchsuchen (...) ein Bild aus dem Ordner (z. B. C:\\tmp\\test.jpg) und ersetzt den Bildnamen durch den Platzhalter (*) (z. B.: C:\\tmp\\*.jpg). Dateinamen und Pfade duerfen keine ue, ae und oe enthalten"
"Original: Richard Hirner, Petr Andreev ---Erweiterungen: Steffen Schnur"
"Original: 2006, Richard Hirner, Petr Andreev ---Erweiterungen: 2007, Steffen Schnur www.steffen-schnur.de (http://www.steffen-schnur.de)"
"Version 1.3 Mar 16, 2007"
""
SF-FILENAME "Platzhalter (*) zulaessig" ".jpg"
SF-STRING "Vor Dateinamen setzen (neu-Bildname.jpg)" "neu-"
SF-VALUE "Neue lange Seite Bild 1 (px)" "1200"
SF-VALUE "Neue kurze Seite Bild 1 (px)" "800"
SF-ADJUSTMENT "Schaerfung B1 (0 viel) (10 wenig)" '(2.5 0.0 10 0.1 1 1 0)
SF-TOGGLE "Zusaetzliche Ausgabe Bild 2" TRUE
SF-VALUE "Neue lange Seite Bild 2 (px)" "600"
SF-VALUE "Neue kurze Seite Bild 2 (px)" "400"
SF-ADJUSTMENT "Schaerfung B2 (0 viel) (9 wenig)" '(2.5 0.0 10 0.1 1 1 0)
SF-TOGGLE "Zusaetzliche Ausgabe Bild 3" TRUE
SF-VALUE "Neue lange Seite Bild 3 (px)" "150"
SF-VALUE "Neue kurze Seite Bild 3 (px)" "100"
SF-ADJUSTMENT "Schaerfung B3 (0 viel) (10 wenig)" '(2 0.0 10 0.1 1 1 0)
SF-ADJUSTMENT "JPEG-Qualitaet" '(98 1 100 1 10 1 0)
SF-ADJUSTMENT "Glaettung" '(0.0 0.0 1 0.1 0.1 1 0)
SF-TOGGLE "JPEG optimieren" TRUE
)