Wie kann ich alle Ebenen mit Gimps Skript fu speichern (exportieren)?

Mit gimp fu kann ich den Inhalt einer Schicht speichern (zumindest das ist, wie ich die Definition von gimp_file_save interpretiere, weil es den Parameter drawable ).

Jetzt habe ich das folgende Skript:

 from gimpfu import * def write_text(): width = 400 height = 100 img = gimp.Image(width, height, RGB) img.disable_undo() gimp.set_foreground( (255, 100, 20) ) gimp.set_background( ( 0, 15, 40) ) background_layer = gimp.Layer( img, 'Background', width, height, RGB_IMAGE, 100, NORMAL_MODE) img.add_layer(background_layer, 0) background_layer.fill(BACKGROUND_FILL) text_layer = pdb.gimp_text_fontname( img, None, 60, 40, 'Here is some text', 0, True, 30, PIXELS, 'Courier New' ) drawable = pdb.gimp_image_active_drawable(img) # Either export text layer ... # pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?') # .... or background layer: pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?') register( proc_name = 'tq84_write_text', blurb = 'tq84_write_text', help = 'Create some text', author = 'Rene Nyffenegger', copyright = 'Rene Nyffenegger', date = '2014', label = '<Toolbox>/Xtns/Languages/Python-Fu/_TQ84/_Text', imagetypes = '', params = [], results = [], function = write_text ) main() 

Wenn ich pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?') um das Bild zu speichern, exportiert es nur die "Text" -Schicht. Dennoch, wenn ich pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?') wird es nur den Hintergrund exportieren. Also, wie kann ich beide Schichten in ein Bild exportieren (wie das Menü File -> Export As es tun würde).

    2 Solutions collect form web for “Wie kann ich alle Ebenen mit Gimps Skript fu speichern (exportieren)?”

    Was intern getan wird, auch von GIMP-Datei-Expoerter-Plug-Ins für alle Formnats ist: Duplizieren Sie das Bild, fusionieren Sie alle sichtbaren Ebenen, sie speichern das resultierende Drawable.

    Das ist einfacher und nutzt weniger Ressourcen als es klingt. Effektiv musst du nur deine Sparlinie ersetzen

     pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?') 

    durch

     new_image = pdb.gimp_image_duplicate(img) layer = pdb.gimp_image_merge_visible_layers(new_image, CLIP_TO_IMAGE) pdb.gimp_file_save(new_img, layer, '/temp/tq84_write_text.png', '?') pdb.gimp_image_delete(new_image) 

    (Der letzte Anruf "löscht" das neue Bild aus dem Programmspeicher und löst natürlich die Ressourcen frei)

    Ich habe herausgefunden, dass GIMP (mindestens Version 2.8) alle Ebenen des Bildes in die XCF-Datei speichert, wenn du None das drawable Argument an gimp_xcf_save()

    pdb.gimp_xcf_save(0, image, None, 'file.xcf', 'file.xcf')

    Python ist die beste Programmiersprache der Welt.