2014-11-07 25 views
8

Con gimp fu, posso salvare il contenuto di uno strato (almeno, è così che interpreto la definizione di gimp_file_save perché prende il parametro drawable).Come posso salvare (esportare) tutti i livelli con lo script di gimp fu?

ora, ho il seguente script:

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() 

Quando uso pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?') per salvare l'immagine, sarà solo esportare il livello di "testo". Tuttavia, se utilizzo pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?'), verrà esportato solo lo sfondo. Quindi, come posso esportare entrambi i livelli in un'unica immagine (come farebbe il menu File -> Export As).

+0

Duplicato di http://stackoverflow.com/questions/15482280/gimp-python-fu-exporting-file-only-exports-transparent-layer? –

risposta

8

Ciò che viene eseguito internamente, anche dai plug-in di file-expoerter di GIMP per tutti i formnat è: duplica l'immagine, unisci tutti i livelli visibili, salva il drawable risultante.

Questo è più semplice e richiede meno risorse di quanto possa sembrare. Effettivamente basta sostituire il salvataggio linea

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

da

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) 

(solo l'ultima chiamata "cancella" la nuova immagine dalla memoria di programma, liberando le risorse, ovviamente)

1

Ho scoperto che se si passa None come argomento drawable a gimp_xcf_save(), GIMP (almeno versione 2.8) salverà tutti i livelli dell'immagine nel file XCF:

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