Python 如何在一次保存中保存多个图层修改

Python 如何在一次保存中保存多个图层修改,python,gimp,python-fu,Python,Gimp,Python Fu,我有一个python脚本,可以在现有GIMP文件中查找和更新多个文本层。我想把整个文件作为副本保存下来。但是,我发现使用pdb.gimp\u xcf\u save进行文档化的唯一方法是传入一个可绘制文件(我使用当前的文本层)以将文件保存为xcf。所以我在每一层循环时重复这个调用。这似乎是浪费,肯定有办法解决这个问题,只是用一种方法,但我一直无法找到它 def dynamic_text_replace_plugin(timg, tdrawable, pathToXcf, textToReplace

我有一个python脚本,可以在现有GIMP文件中查找和更新多个文本层。我想把整个文件作为副本保存下来。但是,我发现使用pdb.gimp\u xcf\u save进行文档化的唯一方法是传入一个可绘制文件(我使用当前的文本层)以将文件保存为xcf。所以我在每一层循环时重复这个调用。这似乎是浪费,肯定有办法解决这个问题,只是用一种方法,但我一直无法找到它

def dynamic_text_replace_plugin(timg, tdrawable, pathToXcf, textToReplace, saveAsJpg):
    texts = textToReplace.split('~')
    myImage = pdb.gimp_xcf_load(1, pathToXcf, pathToXcf)

    textCount = 0
    for newText in texts:
        textCount = textCount + 1
        textLabel = "TEXT" + str(textCount)
        myLayer = pdb.gimp_image_get_layer_by_name(myImage, textLabel)
        sourceText = pdb.gimp_text_layer_get_text(myLayer)
        textToReplace = sourceText.replace(textLabel, newText)
        pdb.gimp_text_layer_set_text(myLayer, textToReplace)
        # Not sure if I can do this once or if it has to be for every layer?
        saveAsPath = pathToXcf.replace(".xcf", "_replaced.xcf")
        pdb.gimp_xcf_save(1, myImage, myLayer, saveAsPath, saveAsPath)

    if (saveAsJpg):
        pathToJpg = pathToXcf.replace(".xcf", ".jpg")
        myImage.flatten()
        pdb.gimp_file_save(myImage, myImage.layers[0], pathToJpg, '?')

    # Clean up memory
    pdb.gimp_image_delete(myImage)
AFAIK保存为多层格式(如XCF)时,“drawable”参数将被忽略。因此,给它任何图像层或
None
,只保存一次:

pdb.gimp_xcf_save(0, image, None,'/tmp/foo.xcf','/tmp/foo.xcf')

你不是每次都覆盖同一个文件,所以只有最后一次保存才会生效吗?另外,请修复文章中代码的缩进。现在还不清楚哪些部分属于
def dynamic\u text\u replace\u plugin
语句。是的,它就是这样做的,但似乎有点浪费。我的意思是,它有效,但似乎过度了。在我看来,它应该能够将层保存在内存中,然后在我调用gimp_xcf_save时将它们全部写下来,但这需要一个层来保存,所以我一直在为我接触的每一层进行保存。它可以工作,但感觉不对劲。最后,我们开始实施它,尝试一下,它确实可以工作!谢谢:)