2016-07-17 16 views
0

Dies ist mein erster Ausflug in gimp Scripting, und ich habe anscheinend ein grundlegendes Missverständnis. Ich habe den folgenden Code geschrieben, die in der angegebenen Datei weiß in Transparenz umwandeln sollten, und das Ergebnis als png-Datei zu exportieren:Warum werden diese Scripted Gimp Image-Modifikationen nicht beibehalten?

(define (edit-name original-name) 
    (let* ((pos (- (string-length original-name) 4)) 
    (suffix (substring original-name pos)) 
    (prefix (substring original-name 0 pos)) 
    (new-name (string-append prefix ".png"))) 
    new-name)) 

(define (my-process filename) 
    (let* ((color '(0 0 0)) 
      (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) 
      (drawable (car (gimp-image-get-active-layer image))) 
      (filename-modified (edit-name filename))) 
     (if (not (gimp-drawable-is-rgb drawable)) 
      (gimp-image-convert-rgb image)) 
     (plug-in-colortoalpha RUN-NONINTERACTIVE image drawable color) 
     (file-png-save2 RUN-NONINTERACTIVE image drawable filename-modified filename-modified 0 9 1 1 1 1 1 0 1))) 

Dieses Skript in der Datei ~/.gimp-2.8/scripts/my-process.scm gespeichert und aufgerufen, mit:

gimp -i -b '(my-process "somefile.xcf")' -b '(gimp-quit 0)'

Das Skript wird ausgeführt und ich auf der Konsole ausgegeben sagen batch command executed successfully. Wenn ich außerdem einen offensichtlichen Syntax- oder Parameterfehler in das Skript einfüge, erhalte ich einen Fehler. Ich habe auch versucht, das Zeichen nach der RGB-Konvertierung wieder zu bekommen, falls die Konvertierung ein anderes Objekt ergibt. Ich habe auch versucht, file-png-save-defaults anstelle von file-png-save2 zu verwenden, ohne Erfolg.

Die Ausgabe, die ich bekomme, ist jedoch ein einfacher Png-Export im indizierten Farbmodus (der ursprüngliche Modus des Quellbildes), der den Alphakanal nicht enthält.

Ich habe die Dokumentation für die Umwandlungsschritte, die ich verwende, angeschaut und kann nicht herausfinden, was vor sich geht; Hilfe würde sehr geschätzt werden.

+0

Haben Sie verifiziert, was Ihr Skript mit einem Bild tut, indem Sie es z. die Script-Fu-Konsole in GIMP? –

Antwort

2

Dies funktioniert für mich (das ist der Code in Python, die gleichen Anrufe verwenden):

image=gimp.image_list()[0] 
layer=image.active_layer 
print "Type before:",pdb.gimp_drawable_type(layer) 
pdb.gimp_image_convert_rgb(image) 
print "Type after:",pdb.gimp_drawable_type(layer) 
print "Has alpha after:",pdb.gimp_drawable_has_alpha(layer) 
pdb.plug_in_colortoalpha(image,layer,(0,0,0)) 
pdb.file_png_save2(image,layer,'/tmp/foo.png','/tmp/foo.png',0,9,1,1,1,1,1,0,1) 

und der Ausgang ist (Sie können die oben direkt in der Python-Konsole einfügen):

>> image=gimp.image_list()[0] 
>>> layer=image.active_layer 
>>> print "Type before:",pdb.gimp_drawable_type(layer) 
Type before: 4 
>>> pdb.gimp_image_convert_rgb(image) 
>>> print "Type after:",pdb.gimp_drawable_type(layer) 
Type after: 0 
>>> print "Has alpha after:",pdb.gimp_drawable_has_alpha(layer) 
Has alpha after: 0 
>>> pdb.plug_in_colortoalpha(image,layer,(0,0,0)) 
>>> pdb.file_png_save2(image,layer,'/tmp/foo.png','/tmp/foo.png',0,9,1,1,1,1,1,0,1) 

Was ich findig finde, ist, dass es nach der Konvertierung keinen Alpha-Kanal gibt (Typ ist RGB_IMAGE und nicht RGBA_IMAGE) (was erwartet wird), aber Farbe-zu-Alpha funktioniert, ohne einen hinzuzufügen. Sie können jedoch versuchen, einen explizit hinzuzufügen und sehen, ob sich dadurch etwas ändert.

Dies gesagt, 95% aller Batch-Verarbeitung in Gimp ist besser mit ImageMagick getan. Für Farbe-zu-Alpha, siehe this SO question

+0

Ich kann bestätigen, dass die Verwendung von Python in der richtigen Ausgabe für mich resultiert, so dass dies wie ein Fehler auf der Seite von Scheme aussieht. – Jeremy

+0

Oh, und ich habe vergessen hinzuzufügen: explizit das Hinzufügen eines Alpha-Kanals ändert nicht das Ergebnis. – Jeremy

Verwandte Themen