2013-03-18 110 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