gpt4 book ai didi

layer - Gimp - 使多层可见的简单方法?

转载 作者:行者123 更新时间:2023-12-04 13:48:37 27 4
gpt4 key购买 nike

在 Gimp 中,我创建了一个包含大约 200 个层的 .xcf 文件。有些是可见的,有些则不是。现在我想创建一个包含所有图层的图片,所以我必须让所有图层都可见。稍后我将不得不返回某些图层可见而某些图层不可见的状态。如何在不点击数百个点击框的情况下实现这一目标?

最佳答案

Shift+单击图层对话框中图层的眼睛图标(eycon?),或者如果图层当前不可见,则单击它应该在的位置。

这会:

  • 使您单击的图层可见
  • 第一次单击使所有其他图层不可见,下次单击时可见

  • http://docs.gimp.org/2.8/en/gimp-dialogs-structure.html#gimp-layer-dialog

    为了回到以前的状态,我会使用 File->Revert,这会丢弃任何更改并从磁盘重新加载文件

    但是...

    ...这是堆栈溢出,所以我们需要在代码中做到这一点...

    我建议在 GIMP 中使用 Python 控制台,Filters->Python-Fu->Console。假设图像是您正在处理的唯一图像,以下代码将其所有图层设置为可见:
    pdb.gimp_image_undo_group_start(gimp.image_list()[0])
    for layer in gimp.image_list()[0].layers:
    layer.visible = True

    pdb.gimp_image_undo_group_end(gimp.image_list()[0])

    代码的主要部分是对图像所有层的循环,将它们设置为可见。该循环包含在一个撤消组中,允许在一个步骤中轻松撤消所有可见性更改。

    但是……图层组?

    是的,我们还没有到那个程度。

    如果您的图像使用图层组,您会注意到上面的代码将使任何不在组中的图层和组本身可见,但不会影响组中的任何图层。

    我们可以判断我们在 for 循环中遇到的图层是否是图层组 - pdb.gimp_item_is_group(layer) 将返回 true 。所以在迭代时,我们可以检查当前项目是否是一个组,并开始迭代它的子项。

    Python 有通过任意 bool 过滤器表达式过滤列表(gimp.Image.layers 是一种)的绝妙方法,我们得到了其中一种,见上文。

    因此,与其使用额外的 if 语句使当前循环复杂化,我们可以这样做:
    pdb.gimp_image_undo_group_start(gimp.image_list()[0])

    # iterate layer groups
    for group in [group for group in gimp.image_list()[0].layers if pdb.gimp_item_is_group(group)]:
    # you want a group.name check here to pick a specific group
    for layer in group.layers:
    layer.visible = True

    # iterate non-group layers
    for layer in gimp.image_list()[0].layers:
    layer.visible = True

    pdb.gimp_image_undo_group_end(gimp.image_list()[0])

    但是...嵌套层组?

    是的,仍然不完全 - 如果您有嵌套的图层组。上面的代码只进入第一层组,不会影响深层嵌套组结构中的任何层。

    这是递归过程比迭代循环更有用的地方,因此请继续关注其他更新。

    关于layer - Gimp - 使多层可见的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33274390/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com