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

Posted

技术标签:

【中文标题】GIMP Python-fu 导出文件只导出透明层【英文标题】:GIMP Python-fu exporting file only exports transparent layer 【发布时间】:2013-03-07 02:40:36 【问题描述】:

我在通过 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对象上,因为我只想复制单击File->Export的选项并保存为PNG而不做通过GUI。我宁愿让它自动保存(我有 49 张图像,每个图像都会自动命名,但首先我需要让它用一张图像正确导出)。正如我之前所说,上面的代码只导出透明背景,即使更改为 GIF 也不能解决问题。如何在保留所有图层和透明背景的同时将文件导出为 PNG?

【问题讨论】:

【参考方案1】:

我发现了我的问题!我没有合并可见图层并将其设置为等于新图层,然后在将图像保存为 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,在副本中进行图层合并。

以上是关于GIMP Python-fu 导出文件只导出透明层的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python-Fu 中做相当于 Gimp 的颜色、自动、白平衡?

AI 的图片如何导出无透明alpha,png格式

ps画布设置为透明后,画板依然显示白色,怎么恢复透明格子?

PHP/GD:如何处理 jpg 透明度?

C# GDI+导入图片如何让背景透明

如何在导出图层之前将1条调整曲线应用于每个图层(渲染为视频)?