Script-Hilfe

FremdGimp
Beiträge: 3
Registriert: Mo 7. Mai 2018, 17:07
Skype:

Script-Hilfe

Beitragvon FremdGimp » Mo 7. Mai 2018, 17:38

Hi!

Ich versuche seit dem neuen Update, ein Script auf die Beine zu stellen, da das BIMP-Plugin seitdem nicht mehr funktioniert.
Allerdings ist meine letzte Programmiererfahrung Basic gewesen, zu einer Zeit zu der das auch noch halbwegs benutzt wurde... Meine Fortschritte halten sich also in Grenzen, einiges habe ich mir aus anderen Scripts rauskopiert, es ist also wahrscheinlich ein wenig durcheinander.
Was es machen soll:
    - In einem Ordner bei den vorhandenen Bildern einen Bereich von Höhe des gesamten Bildes und Breite nach Nutzereingabe weiss füllen
    - Einen vorgegebenen Rand für die nächste Auswahl abziehen
    - Das Bild in zwei gleich große Teile Links/Rechts aufteilen
    - Beide Teile in verschiedene Dateien speichern, Dateinamen mit fortlaufenden Nummern
Was es bis jetzt macht: Ich scheitere zur Zeit am Füllen des vorgegebenen Bereichs, ich schätze, dass ich die Layer nicht richtig verstanden habe. Als Ausgabe erhalte ich je nach Setzen der Layernummer entweder ein schwarzes Bild mit einem weissen Balken oder das Originalbild ohne Änderungen.

Hier der Code den ich bis jetzt zusammengeschustert habe:

Code: Alles auswählen

;--- Im GIMP und im Menü registrieren ---------

(script-fu-register
"script-fu-split" ;Funktionsname
_"_Seiten aufteilen" ;Menütext
"Alle Bilder eines Ordners aufteilen und in einem\
Zielordner abspeichern" ;Beschreibung
"FremdGimp" ;Author
"Copyright 2018" ;Copyright
"01.05.2018" ;Erstellungsdatum
"" ;Bildtyp auf dem das Skript basiert
SF-DIRNAME "Quellenverzeichnis" "C:\\Users\\FremdGimp\\Desktop\\Bilder\\" ;String-Variable
SF-VALUE "Bildbreite" "7000" ;Wert-Variable
SF-VALUE "Bildhöhe" "5000" ;Wert-variable
SF-VALUE "Rand Oben/Unten" "46" ;Wert-Variable
SF-VALUE "Rand Links/Rechts" "46" ;Wert-variable
SF-VALUE "Position der Falz" "3500" ;Wert-variable
SF-VALUE "Breite der Falz" "200") ;Wert-variable

(script-fu-menu-register "script-fu-split"
"<Image>/Aufteilen")

;--- Code -------------------------------------

(define (script-fu-split SourceFolder max-x max-y offx offy fold fold-width)

(define (split-img n f)

(let* ((fname (car f))
(img (car (gimp-file-load 1 fname fname)))
(Targetfname fname)
(FalzSelect 0)
(ImgOrig 0)
(ImgLeft 0)
(ImgRight 0)
)

(gimp-image-undo-disable img)
(set! Targetfname (string-append SourceFolder "\\Fertig\\" (car(gimp-image-get-name img))))
(set! ImgOrig (car (gimp-layer-new-from-drawable (car (gimp-image-get-active-drawable img)) img)))
(gimp-image-insert-layer img ImgOrig 0 0)
(gimp-image-select-rectangle img 2 (- fold (/ fold-width 2)) 0 fold-width (car (gimp-image-height img)))
(set! FalzSelect (car (gimp-layer-new-from-drawable (car (gimp-image-get-selection img)) img)))
(gimp-image-insert-layer img FalzSelect 0 1)
(gimp-edit-fill FalzSelect 2)
(gimp-image-flatten img)
(file-jpeg-save 1 img (car (gimp-image-get-active-drawable img)) Targetfname Targetfname 0.40 0 1 0 "" 2 0 0 2)
(gimp-image-delete img)

)

(if (= n 1) 1 (split-img (- n 1) (cdr f)))

)

(let* ((files (file-glob (string-append SourceFolder "\\*.jpg") 0)))

(split-img (car files) (car (cdr files)))
)

)

Würde mich sehr freuen, wenn sich Jemand die Zeit dafür nehmen könnte, sich das mal anzusehen.
Und noch eine Frage: Gibt es die Möglichkeit, mit dem Script einen noch nicht existierenden Ordner neu zu erstellen? Meine Recherchen haben mich nur zu Python-Scripts geführt, mit denen ich noch viel weniger anfangen konnte.

Benutzeravatar
Gimplyworxs
Beiträge: 343
Registriert: Fr 17. Mär 2017, 15:43
Skype:
Wohnort: Crailsheim, BaWü

Re: Script-Hilfe

Beitragvon Gimplyworxs » Mo 7. Mai 2018, 19:25

Hallo,
Mit dem Script kann ich dir leider nicht helfen, lerne auch erst das ganze zu verstehen .
(Habe übrigens auch mal mit BASIC angefangen ... lang ists her).
Aber ich halte es für möglich, daß du einfach nur ein bissel Geduld aufbringen müßtest bis BIMP wieder läuft.
Ich deute die Diskussion auf Github mit dem Autor https://github.com/alessandrofrancescon ... issues/171 jedenfalls so, als wenn der sich an die Arbeit machen möchte .... nur die alten Teile noch nicht beieinander hat.
Gruß
Gimplyworxs


>>>> Meine Galerie <<<< :

#
______________
Gimp 2.8.22 auf Linux Mint 18.3 MATE

Benutzeravatar
Huromo
Beiträge: 44
Registriert: So 12. Nov 2017, 16:56
Skype:

Re: Script-Hilfe

Beitragvon Huromo » Mo 7. Mai 2018, 20:27

Stimmt irgendwie Basic und Scriptsprachen sind nicht so wirklich miteinander zu vergleichen. Auch ich habe mit dem Spaghetticode angefangen und bin dann bei dBase hängen geblieben. Aber das mit den Klammern in dem Script würde ich noch mal überprüfen - kommt mir irgenwie vor als wären da entweder zuviel oder es fehlt noch was.

LG Hubert

Benutzeravatar
Gimplyworxs
Beiträge: 343
Registriert: Fr 17. Mär 2017, 15:43
Skype:
Wohnort: Crailsheim, BaWü

Re: Script-Hilfe

Beitragvon Gimplyworxs » Mo 7. Mai 2018, 21:21

@Fremdgimp
Ist deine GIMP Version 64bit (Windows)?
BIMP ist vermutlich 32bit und wird deshalb nicht laufen. Das müßte neu kompiliert werden für 64bit eben.
Arg viel falsch kann an der Version nicht sein, denn unter Linux 64bit läuft es miteinander.
Vielleicht hättest du ne Chance wenn du GIMP als 32bit Version installierst?


edit:
Wenn du English kannst, kannst du heir nachlesen wie Rich2005 das gelöst hat.
http://gimpchat.com/viewtopic.php?f=9&t ... 71#p227571

Man erwartet aber, daß es über kurz oder lang ne kompatible Version geben wird.
Gruß
Gimplyworxs


>>>> Meine Galerie <<<< :

#
______________
Gimp 2.8.22 auf Linux Mint 18.3 MATE

FremdGimp
Beiträge: 3
Registriert: Mo 7. Mai 2018, 17:07
Skype:

Re: Script-Hilfe

Beitragvon FremdGimp » Mo 7. Mai 2018, 21:32

Danke für die Recherche Gimplyworxs! Ich denke auch mal, dass das Plugin bald wieder laufen wird. Allerdings wäre ein Script mit meinen Abläufen trotzdem hilfreich, da BIMP auch nur eine behelfsmäßige Lösung war - man kann beispielsweise beim Croppen kein Offset mit angeben und auch nicht zweimal den gleichen Ablauf in einem Durchgang haben, so dass ich dabei immer erst mal den Rand croppen musste, dann ein neuer Durchgang -> linke Seite und dann noch ein Durchgang -> rechte Seite.
Bei den Klammern bin ich halbwegs sicher, dass sie richtig sind - in notepad++ sieht man das ganz gut.

FremdGimp
Beiträge: 3
Registriert: Mo 7. Mai 2018, 17:07
Skype:

Re: Script-Hilfe

Beitragvon FremdGimp » Mi 9. Mai 2018, 08:54

So, ein Update:
Es macht jetzt fast alles was ich will - wenn es jetzt noch selbstständig einen Ordner erstellen würde und man sich aussuchen könnte, ob man als Dateinamen fortlaufende Nummern haben möchte, wäre ich restlos glücklich.

Hier der aktualisierte Code:

Code: Alles auswählen

;--- Im GIMP und im Menü registrieren ---------

(script-fu-register
"script-fu-split" ;Funktionsname
_"_Seiten aufteilen" ;Menütext
"Alle Bilder eines Ordners aufteilen und in einem\
Zielordner abspeichern" ;Beschreibung
"FremdGimp" ;Author
"Copyright 2018" ;Copyright
"01.05.2018" ;Erstellungsdatum
"" ;Bildtyp auf dem das Skript basiert
SF-DIRNAME "Quellenverzeichnis" "C:\\Users\\FremdGimp\\Desktop\\Bilder\\" ;String-Variable
SF-VALUE "Rand Oben/Unten" "46" ;Wert-Variable
SF-VALUE "Rand Links/Rechts" "46" ;Wert-variable
SF-VALUE "Position der Falz" "3500" ;Wert-variable
SF-VALUE "Breite der Falz" "200") ;Wert-variable

(script-fu-menu-register "script-fu-split"
"<Image>/Aufteilen")

;--- Code -------------------------------------

(define (script-fu-split SourceFolder offx offy fold fold-width)

(define (split-img n f)

(let* ((fname (car f))
(img (car (gimp-file-load 1 fname (substring fname 0 (- (string-length fname) 4)))))
(Targetfname fname)
(ImgHeight 0)
(ImgWidth 0)
(ImgOrigin 0)
(ImgLeft 0)
(ImgRight 0)
)

(gimp-image-undo-disable img)
(set! Targetfname (string-append SourceFolder "\\Fertig\\" (car (gimp-image-get-name img))))
(set! ImgHeight (car (gimp-image-height img)))
(set! ImgWidth (car (gimp-image-width img)))
(set! ImgOrigin (car (gimp-image-get-active-drawable img)))
(gimp-image-select-rectangle img 2 (- fold (/ fold-width 2)) 0 fold-width ImgHeight)
(gimp-edit-fill (car (gimp-image-get-active-drawable img)) 2)
(cond ((> ImgWidth (* fold 2)) ;Liegt Falz links vom Mittelpunkt?
(begin
(gimp-image-select-rectangle img 2 offx offy (- fold offx) (- ImgHeight (* offy 2)))
(gimp-edit-copy (car (gimp-image-get-active-drawable img)))
(gimp-edit-paste (car (gimp-image-get-active-drawable img)) TRUE)
(set! ImgLeft (car (gimp-floating-sel-to-layer (car (gimp-image-get-floating-sel img)))))
(file-jpeg-save 1 img (car (gimp-image-get-active-layer img)) (string-append Targetfname ".jpg") (string-append Targetfname ".jpg") 0.40 0 1 0 "" 2 0 0 2)
(gimp-image-set-active-layer img ImgOrigin)
(gimp-image-select-rectangle img 2 fold offy (- fold offx) (- ImgHeight (* offy 2)))
(gimp-edit-copy (car (gimp-image-get-active-drawable img)))
(gimp-edit-paste (car (gimp-image-get-active-drawable img)) TRUE)
(set! ImgRight (car (gimp-floating-sel-to-layer (car (gimp-image-get-floating-sel img)))))
      )
      )
      ((< ImgWidth (* fold 2)); Liegt Falz rechts vom Mittelpunkt?
(begin
(gimp-image-select-rectangle img 2 (- fold (- ImgWidth fold offx)) offy (- ImgWidth fold offx) (- ImgHeight (* offy 2)))
(gimp-edit-copy (car (gimp-image-get-active-drawable img)))
(gimp-edit-paste (car (gimp-image-get-active-drawable img)) TRUE)
(set! ImgLeft (car (gimp-floating-sel-to-layer (car (gimp-image-get-floating-sel img)))))
(file-jpeg-save 1 img (car (gimp-image-get-active-layer img)) (string-append Targetfname ".jpg") (string-append Targetfname "jpg") 0.40 0 1 0 "" 2 0 0 2)
(gimp-image-set-active-layer img ImgOrigin)
(gimp-image-select-rectangle img 2 fold offy (- ImgWidth fold offx) (- ImgHeight (* offy 2)))
(gimp-edit-copy (car (gimp-image-get-active-drawable img)))
(gimp-edit-paste (car (gimp-image-get-active-drawable img)) TRUE)
(set! ImgRight (car (gimp-floating-sel-to-layer (car (gimp-image-get-floating-sel img)))))
   )
      )
     ((= ImgWidth (* fold 2)); Liegt Falz auf Mittelpunkt?
(begin
(gimp-image-select-rectangle img 2 offx offy (- fold offx) (- ImgHeight (* offy 2)))
(gimp-edit-copy (car (gimp-image-get-active-drawable img)))
(gimp-edit-paste (car (gimp-image-get-active-drawable img)) TRUE)
(set! ImgLeft (car (gimp-floating-sel-to-layer (car (gimp-image-get-floating-sel img)))))
(file-jpeg-save 1 img (car (gimp-image-get-active-layer img)) (string-append Targetfname ".jpg") (string-append Targetfname "jpg") 0.40 0 1 0 "" 2 0 0 2)
(gimp-image-set-active-layer img ImgOrigin)
(gimp-image-select-rectangle img 2 fold offy (- fold offx) (- ImgHeight (* offy 2)))
(gimp-edit-copy (car (gimp-image-get-active-drawable img)))
(gimp-edit-paste (car (gimp-image-get-active-drawable img)) TRUE)
(set! ImgRight (car (gimp-floating-sel-to-layer (car (gimp-image-get-floating-sel img)))))
   )
      )
)
(file-jpeg-save 1 img (car (gimp-image-get-active-layer img)) (string-append Targetfname "b.jpg") (string-append Targetfname "b.jpg") 0.40 0 1 0 "" 2 0 0 2)
(gimp-image-delete img)

)

(if (= n 1) 1 (split-img (- n 1) (cdr f)))

)

(let* ((files (file-glob (string-append SourceFolder "\\*.jpg") 0)))

(split-img (car files) (car (cdr files)))
)

)

Benutzeravatar
Gimplyworxs
Beiträge: 343
Registriert: Fr 17. Mär 2017, 15:43
Skype:
Wohnort: Crailsheim, BaWü

Re: Script-Hilfe

Beitragvon Gimplyworxs » Mi 9. Mai 2018, 16:29

Funktioniert ja richtig gut. :super:
Auf meinem Linux System mußte ich natürlich die Pfade ein wenig anpassen. Aber danach paßt es.

Verzeichnisse erstellen ... findet man nicht so wirklich was für ( außer den blöden Rat doch gleich Python zu nehmen statt Script-Fu.)
Nun ist ja Script-Fu eine Abwandlung von Lisp und dort ginge das so:

Code: Alles auswählen

The function ensure-directories-exist creates the directories if they do not exist:
(ensure-directories-exist "foo/bar/baz/")
This may create foo, bar and baz. Don’t forget the trailing slash.


Käme auf den Versuch an, ob Script-Fu da mitspielt.
Gruß
Gimplyworxs


>>>> Meine Galerie <<<< :

#
______________
Gimp 2.8.22 auf Linux Mint 18.3 MATE


Zurück zu „Hilfe zu Gimp“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste