Gimp:将每个图层导出为单独的 PNG 图像

Par*_*rto 80 gimp image-processing

我遇到了一种情况,我在 Gimp 中有一个具有多层的图像。现在,我想将每个图层作为单独的图像(最好是 PNG 格式)自动导出到某个文件夹中。

这可能吗?

长方法:隐藏除一层之外的所有图层,裁剪您想要的部分,导出图像。隐藏保存的图层,取消隐藏另一个图层,裁剪部分,导出。重复。对于大约 20 层的图像来说有点麻烦。

Tho*_*ner 113

如果 PNG 是一种可接受的输出格式,一种选择是将其导出为 Open Raster (.ora),这是一种分层图像文件的开放规范。

  1. 将图像导出为开放光栅 (.ora)

    File -> Export As ...

    myfile.ora

  2. myfile.ora以存档形式打开,使用类似file-roller或的程序7zip

    在 Ubuntu 上:

    $ file-roller myfile.ora
    
    $ # note, later version of file-roller on ubuntu hard-code file suffixes, 
      # and refuse to open ".ora" files, work around by renaming the file to ".zip"
    $ ln -s myfile.ora myfile.ora.zip
    $ file-roller myfile.ora.zip
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    $ unzip myfile.ora
    
    Run Code Online (Sandbox Code Playgroud)

    您的所有图层都将是 png 图像/data,提取它们并随意使用。

  • 这太棒了,谢谢 - 我认为这是最好的解决方案。无需安装,速度非常快。我只是用带有 PSD 的 GIMP 来完成的。 (9认同)
  • 看起来 ORA 支持在 2.10 中被删除了。:( (5认同)
  • 这不仅在 2.10.20 中仍然可以很好地工作,而且存档中甚至有一个包含所有图层参数的“stack.xml”文件。sed 管道可以快速执行一组命令来恢复原始层名称:`cat stack.xml |sed -e 's/><layer/\n/g;' |sed -E -e 's/.*name="([^"]*)".*src="([^"]*)".*/cp "\2" "\1"/;' ` (5认同)
  • 我遇到的唯一问题是它不使用我的图层名称作为文件名,这意味着我必须手动映射它们 (2认同)
  • 因此,ORA 文件的导出器是用 Python 编写的。请参阅[我的答案](https://askubuntu.com/a/1263136/166554)了解为什么这很重要。 (2认同)
  • ORA 导出在 2.10.26 中工作得非常好(至少在 Window$ 上)。虽然很慢,但是很有效。https://gitlab.gnome.org/search?group_id=8&nav_source=navbar&project_id=1848&repository_ref=master&scope=&search=openraster&search_code=true&snippets=false (2认同)

小智 52

你也可以试试这个插件,Export Layers。我已经用 png 格式测试过它并且它有效。您只需选择文件夹和格式,即可获得所有图层,每个图层都在其自己的文件中。

  • 这是最简单的。解压文件,将 .py 文件复制到您的 ~/.gimp-2.8/plug-ins 文件夹,使其可执行,然后重新启动 GIMP。 (2认同)
  • 这也可以在 GitHub 上找到:https://github.com/khalim19/gimp-plugin-export-layers (2认同)

小智 10

首先,您不需要任何插件。即使你不需要裁剪任何东西。几个简单的步骤。

  1. 选择一个图层。为此,只需单击该特定图层即可。
  2. 使用Ctrl+将图层复制到剪贴板C
  3. 现在创建一个使用新的图像Ctrl+ Shift+V

就是这样。现在您可以简单地将该图层导出为任何格式。

  1. 使用Shift+ Ctrl+E

  • 另外,如果您只想要两层或三层。如果您发现自己(就像我昨天所做的那样)想要将 79 帧中的每一帧导出为 gif 动画,那就不是太好了。 (3认同)

MRu*_*ule 8

可以将图像导出为动画 GIF。这会将每个图层保存为 GIF 中的单独帧。

然后,ImageMagick 命令 convert -coalesce ./myfile.gif outfile%05d.png会将帧提取为 PNG 图像。

  • 注意:GIF 仅支持 256 种调色板,因此不可能以这种方式制作 24 位 PNG。 (6认同)
  • 此外,对于大图像,“转换”需要很长时间,而“解压缩”ORA 文件几乎是即时的。不过,好主意。 (2认同)

swi*_*ift 6

当然,这适用于插件将图层导出到文件

特征:

  • 操作图层组中的图层。
  • 导出文本、图案和图层过滤器。
  • 必须给出图像文件的前缀名称。
  • 仅以jpgpngbmp格式导出,但可以轻松添加所需的格式。

  • 该链接不再有效,但搜索插件名称出现:https://khalim19.github.io/gimp-plugin-export-layers/ 这是您指的插件吗? (2认同)

FeR*_*eRD 6

ThorSummoner 的答案最好的一点是它引起了人们对 OpenRaster 导出插件的注意,事实证明该插件存在于文件中file-openraster.pyGIMP 安装的文件中。

通过阅读其代码(并在内置程序浏览器的帮助下),我能够确定 GIMP XCF 的图层可以通过界面中的“过滤器”>“Python-fu”>“控制台”保存到单个 PNG,并将以下内容输入到内置的 Python 解释器中:

import os

# If you have multiple images open, you may need to adjust
img = gimp.image_list()[0]

savefn = gimp.pdb['file-png-save-defaults']
outpath = "/home/$USER/Pictures" # (or r"C:\Users\$USER\Pictures", etc)

for lay in img.layers:
    # Even if your layer names contain spaces, not a problem
    outname = lay.name + ".png"
    savefn(img, lay, os.path.join(outpath, outname), outname)
    
    # type an extra newline to exit the indented block
Run Code Online (Sandbox Code Playgroud)

您将看到图像窗口状态栏中的进度表开始快速浏览所有图层,将每个图层写入同名的 PNG 文件中,无论您指定为outpath. (它必须已经存在,否则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)
Run Code Online (Sandbox Code Playgroud)

这会将图层写入名为“Layer 000.png”到“Layer 999.png”的 PNG 文件中(或者存在多个图层,如果少于 1000 个)。

如果 Gimp 的 Python 版本不支持 f 字符串(Python 3.6+),则这完全等效:

outname = "Layer {0:03}.png".format(n)
Run Code Online (Sandbox Code Playgroud)


小智 5

我想你可以尝试找到一些东西ImageMagickapt-get install imagemagick。它似乎能够处理 XCF 格式,您可以使用命令中的 [N] 以 png 格式导出图层,其中 N 是图层的级别。

来源:http : //www.imagemagick.org/discourse-server/viewtopic.php?f=1& t= 17603

ImageMagick 读取模组:http : //www.imagemagick.org/Usage/files/#read_mods