ThorSummoner的回答最好的地方在于它提到了OpenRaster导出插件,而这个插件实际上位于GIMP安装目录下的file-openraster.py文件中。
通过阅读它的代码(并在内置的过程浏览器的帮助下),我能够确定GIMP XCF的图层可以通过在界面中转到Filters > Python-fu > Console,并将以下内容输入到内置的Python解释器中来保存为单独的PNG文件:
import os
img = gimp.image_list()[0]
savefn = gimp.pdb['file-png-save-defaults']
outpath = "/home/$USER/Pictures"
for lay in img.layers:
outname = lay.name + ".png"
savefn(img, lay, os.path.join(outpath, outname), outname)
在图像窗口的状态栏中,你会看到进度条开始快速地遍历所有图层,并将每个图层写入一个同名的PNG文件中,保存在你指定的目录下(该目录必须已经存在,否则在循环之前添加os.makedirs(outpath, exist_ok=True)
)。
如果你的图层名称相同,那就有问题了,因为它会毫不犹豫地覆盖任何先前写入的文件。注意GIMPtor。
编辑:如果你确实有同名的图层,你可以简单地忽略名称,而是将图层写入以数字命名的文件中。只需用以下内容替换上面的最后一个循环:
for n, lay in enumerate(img.layers):
outname = f"Layer {n:03}.png"
savefn(img, lay, os.path.join(outpath, outname), outname)
这将把图层写入名为“Layer 000.png”到“Layer 999.png”的PNG文件中(如果图层数少于1000,则写入相应数量的文件)。
如果Gimp的Python版本不支持f-strings(Python 3.6+),则以下代码完全等效:
outname = "Layer {0:03}.png".format(n)