13

gimp fu を使用すると、1 つのレイヤーのコンテンツを保存できます (少なくとも、 の定義を解釈する方法gimp_file_saveは、パラメーター を取るためdrawableです)。

今、私は次のスクリプトを持っています:

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', '?')すると背景のみがエクスポートされます。では、どうすれば両方のレイヤーを 1 つの画像にエクスポートできますか (メニューのFile -> Export Asように)。

4

3 に答える 3

19

すべての形式の GIMP ファイル エクスポーター プラグインによってさえ、内部的に行われることは、画像を複製し、すべての可視レイヤーをマージし、結果のドローアブルを保存することです。

これは簡単で、見た目よりも少ないリソースで済みます。効果的には、セーブラインを置き換えるだけです

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)

(もちろん、最後の呼び出しはプログラム メモリから新しいイメージを「削除」し、リソースを解放します)

于 2015-02-09T16:36:58.230 に答える