2013-03-18 36 views
4

我遇到問題,通過GIMP將圖像保存在python中。我可以得到圖像並應用我想要的效果,但是當我去保存時,它只保存一層而不是一切(注意:背景是透明的),並且因爲背景是透明的,所以我不能保存它透明的背景。我使用的代碼下面貼:GIMP Python-fu導出文件只導出透明圖層

image_array = gimp.image_list() 
i=0 
for image in image_array: 
    img = image_array[i] 
    layers = img.layers 
    last_layer = len(layers)-1 
    try: 
     disable=pdb.gimp_image_undo_disable(img) 
     pdb.gimp_layer_add_alpha(layers[0]) 
     drw = pdb.gimp_image_active_drawable(img) 
     pdb.plug_in_colortoalpha(img,drw,(0,0,0)) 
     drw = pdb.gimp_image_active_drawable(img) 
     enable = pdb.gimp_image_undo_enable(img) 

    except: 
     print "ERROR" 

    pdb.file_png_save(img, drw, "C:\\Users\\jammer\\Desktop\\test.png", 
         "test.png",0,9,1,1,1,1,1) 
    i+=1 

我也曾嘗試file_png_save2,但我有一種感覺,問題就出在DRW對象我只是想複製一下文件 - >導出的選項並保存爲PNG,而不通過GUI進行。我寧願讓它自動保存(我有49個圖像,每個會自動命名,但首先我需要得到它與一個圖像正確導出)。正如我之前所說的,上面的代碼只導出了一個透明背景,即使更改爲GIF也不能解決問題。如何在保留所有圖層和透明背景的同時將文件作爲PNG導出?

回答

3

我發現我的問題!我沒有合併可見圖層,並將其設置爲等於新圖層,然後在將圖像保存爲png時,將其用作「可繪製對象」!我已經發布了下面的固定代碼:

image_array = gimp.image_list() 
i=0 
for image in image_array: 
    img = image_array[i] 
    layers = img.layers 
    last_layer = len(layers)-1 
    try: 
     disable=pdb.gimp_image_undo_disable(img) 
     pdb.gimp_layer_add_alpha(layers[0]) 
     drw = pdb.gimp_image_active_drawable(img) 
     pdb.plug_in_colortoalpha(img,drw,(0,0,0)) 
     layer = pdb.gimp_image_merge_visible_layers(img, gimpfu.CLIP_TO_IMAGE)#FIXES PROBLEM OF ONLY EXPORTING TRANSPARENCY! 
     enable = pdb.gimp_image_undo_enable(img) 

    except: 
     print "ERROR" 

    pdb.file_png_save2(img, layer, "C:\\Users\\jammer\\Desktop\\test.png","test.png",1,9,1,1,1,1,1,0,1) 
    i+=1 
+0

合併所有圖層是做到這一點 - 但你只需要在情況下,如在你的,在圖像是「一次性」 - 合併圖層後有不會返回(GIMP中沒有呼叫「撤消」)。通常的方法是調用'pdb.gimp_image_duplicate',並在副本中執行圖層合併。 – jsbueno 2013-03-19 03:57:52