2014-11-07 2 views
8

С gimp fu я могу сохранить содержимое один слой (по крайней мере, вот как я интерпретирую определение gimp_file_save, потому что он принимает параметр drawable).Как сохранить (экспортировать) все слои с помощью скрипта gimp?

Теперь у меня есть следующий сценарий:

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

Когда я использую pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?'), чтобы сохранить изображение, оно будет экспортировать только слой «текст». Тем не менее, если я использую pdb.gimp_file_save(img, background_layer, '/temp/tq84_write_text.png', '?'), он будет экспортировать только фон. Итак, как я могу экспортировать оба слоя в одно изображение (как это делает меню File -> Export As).

+0

Дубликат http://stackoverflow.com/questions/15482280/gimp-python-fu-exporting-file-only-exports-transparent-layer? –

ответ

8

Что делается внутри, даже с помощью подключаемых модулей GIMP file-expoerter для всех форматов: дублировать изображение, объединять все видимые слои, сохранять сохраненный результат.

Это проще и занимает меньше ресурсов, чем кажется. Эффективно вы просто придется заменить сохранить линии

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

по

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) 

(Последний вызов просто «удаляет» новое изображение из памяти программы, освобождая ресурсы, конечно)

1

Я узнал, что если вы пройдете None в качестве аргумента drawable до gimp_xcf_save(), GIMP (не менее версии 2.8) сохранит все слои изображения в файле XCF:

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

 Смежные вопросы

  • Нет связанных вопросов^_^