GIMP Python-fu嵌套组图层

Lar*_*pon 4 gimp python-fu

我似乎找不到任何方法在python-fu接口的任何地方将组图层添加到另一个组图层.

我试图在Gimp.Layer对象上找到方法,但没有运气.

如何使用python-fu将组图层添加到另一个图层组?

jsb*_*eno 6

在2.8版本之前的最后几分钟添加了对Python-fu上的图层组的支持,并且相当不完整.

因此,在GIMP 2.8中创建适当的图层组的唯一方法是使用pdb调用:

group = pdb.gimp_layer_group_new(img)
group.name = "my group"
Run Code Online (Sandbox Code Playgroud)

(在gimp 2.8上使用img.GroupLayer调用是错误的 - 应该是未来的方法)

获得组后,可以使用a将其插入图像的任何位置

pdb.gimp_image_insert_layer(<img>, <layer>, <parent>, <position>)
Run Code Online (Sandbox Code Playgroud)

像:

>>> img = gimp.Image(640, 480, RGB)
>>> pdb.gimp_display_new(img)
<display>
>>> parent_group = pdb.gimp_layer_group_new(img)
>>> child_group_1 = pdb.gimp_layer_group_new(img)
>>> child_group_2 = pdb.gimp_layer_group_new(img)
>>> grand_child_group = pdb.gimp_layer_group_new(img)
>>> img.add_layer(parent_group, 0)
>>> pdb.gimp_image_insert_layer(img, child_group_1, parent_group,0)
>>> pdb.gimp_image_insert_layer(img, child_group_2, parent_group,1)
>>> pdb.gimp_image_insert_layer(img, grand_child_group, child_group_1,0)
>>> l1 = gimp.Layer(img, "test", 320,240)
>>> pdb.gimp_image_insert_layer(img,l1, grand_child_group,0)
Run Code Online (Sandbox Code Playgroud)

所以,确实存在这种极端的API不对称,在这种情况下,您通过父级的"add_layer"方法向图像添加图层和组,但是必须添加到图层组,您必须转到pdb.gimp_image_insert_layer呼叫.

更新 (2015年2月) - gimp.GroupLayer()的错误在GIMP的git中修复,它将从GIMP 2.8.16开始正常工作.现在,添加新组层的所有工作都是:

>>> g = gimp.GroupLayer(img)
>>> pdb.gimp_image_insert_layer(img, g, None, 0)
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您为我清除 - 我必须完全错过了pdb.gimp_image_insert_layer调用.虽然我知道这不是预期用途 - 我使用GIMP和python-fu作为场景编辑器(实际上更像是对象放置编辑器)用于冒险游戏引擎.我可以在场景中快速设置可触摸区域(具有寄生虫的通道)和具有代表性图形(具有寄生虫的层)的对象.导入和导出场景xml文件可以更快地放置和更正游戏中的对象:)感谢您的辛勤工作,我一直在节省大量时间! (2认同)