2014-11-07 9 views
8

김프 푸 (gimp fu)를 사용하면 하나의 레이어를 저장할 수 있습니다 (적어도 이라는 매개 변수를 사용하므로 gimp_file_save의 정의를 보간합니다). 내가 이미지를 저장 pdb.gimp_file_save(img, drawable, '/temp/tq84_write_text.png', '?')를 사용하는 경우김프의 스크립트 fu로 모든 레이어를 저장 (내보내기)하려면 어떻게해야합니까?

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, 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

내부적으로 수행되는 작업은 모든 양식에 대한 김프 파일 내보내기 도구 플러그인을 사용하는 것입니다. 이미지를 복제하고 표시되는 모든 레이어를 병합하여 결과 드로어 블을 저장합니다.

이것은 쉽고 소리보다 적은 리소스를 사용합니다. 효과적으로 당신은 그냥

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
(마지막 통화는 물론, 자원을 확보, 프로그램 메모리에서 새 이미지를 "삭제")

gimp_xcf_save()drawable 인수로 전달하면 GIMP (최소 버전 2.8 이상)는 이미지의 모든 레이어를 XCF 파일에 저장합니다 :

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