在 gimp 中:如何将设计的不同层保存在单独的文件/图像中?

平面设计 瘸子 层数
2022-02-03 09:36:21

我想知道 gimp 是否有办法将设计的不同层制作成单独的图像文件,而不必每次都保存图像。我希望这很清楚。我也使用图层作为主题的变体,对于我最新的项目,我喜欢将所有这些变体单独放在新的上下文中。

3个回答

Pankaj 指出的帖子中的脚本链接已损坏,因此我用 Python 编写了自己的“保存图层”脚本。要使用该脚本,请将以下脚本保存到您的插件目录(例如~/.gimp-x.x/plug-ins/save_all_layers.py),如果在 Linux/Mac 上为脚本赋予执行权限位(例如chmod +x ~/.gimp-x.x/plug-ins/save_all_layers.py),然后重新启动 GIMP。

#!/usr/bin/env python

from gimpfu import *
from os.path import join

def save_all_layers(image, __unused_drawable, directory, name_pattern):
    for layer in image.layers:
        filename = join(directory, name_pattern % layer.name)
        raw_filename = name_pattern % layer.name
        pdb.gimp_file_save(image, layer, filename, raw_filename)

register(
    "python_fu_save_all_layers",
    "Save all layers into separate files",
    "Save all layers into separate files",
    "Lie Ryan",
    "Lie Ryan",
    "2012",
    "<Image>/File/Save layers as images...",
    "*",
    [
        (PF_DIRNAME, "directory", "Directory to put the images on", "/"),
        (PF_STRING, "name_pattern", "Pattern for file name, %s will be replaced with layer name", "%s.png"),
    ],
    [],
    save_all_layers
)

main()

现在你可以去File > Save layers as images,好吧,将图层保存为图像。

或者,如果您不想重新启动 GIMP 或者不想永久安装插件,则将以下函数复制粘贴到 Python-fu 控制台中:

def save_all_layers(image, directory, name_pattern):
    for layer in image.layers:
        filename = join(directory, name_pattern % layer.name)
        raw_filename = name_pattern % layer.name
        pdb.gimp_file_save(image, layer, filename, raw_filename)

并这样使用它:

>>> # first, find the image object
>>> gimp.image_list()
[<gimp.Image 'Untitled'>, <gimp.Image 'slice_5.xcf'>]
>>> # I want to edit slice_5.xcf, so I select that image
>>> img = gimp.image_list()[1]
>>> # double check that you got the correct image
>>> img
<gimp.Image 'slice_5.xcf'>
>>> # and finally call the function, the %s will be replaced by layer names
>>> save_all_layers(img, "/path/to/save/directory/", "image_%s.png")

就像对伟大的@Lie Ryan 答案的一个小更新一样。名称包含特殊字符(如“/”)的图层可能存在问题,因此save_all_layers可以调整功能以处理此问题(基于此 SO answer)。

from os.path import join
import string

valid_chars = "-_.() %s%s" % (string.ascii_letters, string.digits)

def make_safe(s):
    return ''.join(c for c in s if c in valid_chars)

def save_all_layers(image, directory, name_pattern):
    for layer in image.layers:
        filename = join(directory, make_safe(name_pattern % layer.name))
        raw_filename = make_safe(name_pattern % layer.name)
        pdb.gimp_file_save(image, layer, filename, raw_filename)

无论我知道你必须安装一个脚本来做同样的事情:

链接在下面,请检查并仔细阅读。

http://registry.gimp.org/node/15617

@ all 我是 gimp 的新手,所以可能知识较少:(

如果我错了,请纠正我

谢谢