4

如果您尝试在 gimp 中使用 python 做一些事情并且很难弄清楚,那么 PDB 的文档/命名约定是相当落后的。我最终找到gimp.GroupLayer了(PDB lists gimp-layer-group-new)来创建一个新的图层组。你如何将它插入到图像中并让它显示为一个图层组?

我一直在尝试这样的东西:

img = gimp.image_list()[0]
gl = gimp.GroupLayer(img, "Should be a folder", 1, 1, 0)
img.insert_layer(gl)

真正让我感到困惑的第一件事是,它希望我为 GroupLayer 指定一个高度和宽度,即使它应该只是充当其他实际层的容器(它期望这是因为它继承自Layer,但这是另一回事)。

真正的问题是,当我插入新创建的 时GroupLayer,它显示为普通图层(图层图标中没有文件夹)。我已经通过制作两层来验证这一点,一层是普通层,一层是组层。我将图层组添加到图像中,然后尝试以组图层为父级将普通图层添加到图像中:

img = gimp.image_list()[0]
gl = gimp.GroupLayer(img, "Group Layer", 1, 1, 0)
l = gimp.Layer(img, "Real Layer", 1, 1, 0)
img.insert_layer(gl)
img.insert_layer(l, gl) # gl should be the parent

我得到的只是错误:

Calling error for procedure 'gimp-image-insert-layer':
Item 'group layer #1' (34) cannot be used because it is not a group item`

有没有其他人知道这一点?

更新

乔奥·苏·布埃诺

我刚刚在 gimp-git 中解决了这个问题。Frgom gimp 2.8.12 on,
调用 gimp.GroupLayer 与 gimp.GroupLayer(img, [name="", opacity=100.0, mode=gimp.NORMAL_MODE]) 签名一起工作。

4

1 回答 1

3

似乎在创建 gimp.GroupLayer 时存在错误 - 它的行为类似于普通层,即使对象类型在 Python 中显示为组层。

可以通过 PDB 创建一个工作组层,但是,使用pdb.gimp_layer_group_new(img)- 这一次,tehre 是另一个错误,该对象在 Python 中显示为一个正常的 Layer 对象 - 但在将其插入图像后 pdb.gimp_image_insert_layer(image, layer, <parent (use None for top level)>, <position>)它可以正常工作(并且通过图像“层”属性检索对象将为您提供适当的 GroupLayer 对象)。

对此感到抱歉 - 大部分是我的错 - 我会看看我是否可以为下一个 GIMP 2.8 修复行为 - GIMP 2.8 几乎不支持 Python 的图层组。

更新:从 GIMP 2.8.12 开始,调用 gimp.GroupLayer(image, ...) 会创建一个适当的图层组。

于 2012-09-26T20:31:08.897 回答