Script-fu Skript verhält sich in Konsole anders als übers Menü?


22.01.2025, 08:22

Ok, das Problem ist gelöst.

Das Problem war die Zuweisung der Bild ID:

        (image (car(gimp-image-list)))

dies weist "image" nicht die Bild-ID zu, sondern die Anzahl der offenen Bilder. Deshalb funktioniert das Skript nur, wenn die Anzahl der offenen Bilder zufällig mit der Bild-ID übereinstimmt.

gimp-image-list liefert eine Liste zürück bestehend aus der Anzahl der Bilder und einem Vektor mit Bild-IDs.

So ist's richtig:

(image (vector-ref (cadr(gimp-image-list)) 0))

Erklärung:

(cadr(gimp-image-list)) liefert das 2. Element der Liste zurück (den Vektor mit den Bild-IDs)

vector-ref (x 0) holt dann aus dem vektor das 1. Element (=index 0). Das ist die benötigte Bild-ID.

1 Antwort

Probier das mal, hab es angepasst:

Hier ist eine angepasste Version deines Skripts:

(define (crop-image)
  (let* (
         (image (car(gimp-image-list)))
         (width (car (gimp-image-width image)))
         (height (car (gimp-image-height image)))
         ;; Neue Dimensionen berechnen
         (new-width (- width 12))    ;; 6 Pixel links und rechts
         (new-height (- height 31))   ;; 25 Pixel oben und 6 Pixel unten
         ;; Neuer Startpunkt
         (x 6)
         (y 25)
        )
    ;; Debugging-Ausgaben
    (gimp-message (string-append "Image: " (number->string image)))
    (gimp-message (string-append "Width: " (number->string width)))
    (gimp-message (string-append "Height: " (number->string height)))
    (gimp-message (string-append "NWidth: " (number->string new-width)))
    (gimp-message (string-append "NHeight: " (number->string new-height)))
    (gimp-message (string-append "x: " (number->string x)))
    (gimp-message (string-append "y: " (number->string y)))

    ;; Bild zuschneiden
    ;; Überprüfen ob neue Dimensionen gültig sind
    ;; Verhindern von negativen Werten oder Werten kleiner als Null.
    ;; Optional kann hier auch eine Fehlerbehandlung eingebaut werden.

    ;; Zuschneiden des Bildes 
    ;(if (> new-width 0) 
      ;(if (> new-height 0)
        ;(gimp-image-crop image new-width new-height x y)
      ;))
))

;; Registriere das Script im Script-Fu Menü 
(script-fu-register 
 "crop-image" 
 "NBild Rahmen entfernen" 
 "Zuschneide ein Bild 25 px oben, 6 px andere Seiten" 
 "" 
 "" 
 "2025" 
 "*"
 '((SF-IMAGE "Bild" 0))
)

;; Binde das Skript an das Menü 
(script-fu-menu-register "crop-image" "<Image>/Tools/")

Perso2024 
Beitragsersteller
 16.01.2025, 14:32

Danke.

Was bewirken denn deine Anpassungen?
Oder hast du das ChatGPT und Co anpassen lassen?