GIMP Python-fu导出文件仅导出透明层

5

我在使用GIMP通过Python保存图片时遇到了问题。我可以获取图像并应用想要的效果,但是当我尝试保存时,它只保存一个图层而不是所有的图层(注意:背景是透明的),因为背景是透明的,所以我无法保存除透明背景之外的任何东西。我使用的代码如下:

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并保留所有图层和透明背景?

1个回答

5

我找到了问题所在!我没有合并可见图层并将其设置为新图层,然后将其用作保存为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

合并所有图层是实现这一目的的方法-但是你只想在像你这样的情况下采用这种方法,其中图片是"可丢弃的"-合并图层后就无法返回(在GIMP中没有"撤消"的调用)。通常的方法是调用pdb.gimp_image_duplicate,并在复制品中执行图层合并。 - jsbueno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接