在Gimp中使用Python从组层获取子层
我有一个嵌套层结构的XCD文件:在Gimp中使用Python从组层获取子层,python,layer,gimp,xcf,python-fu,Python,Layer,Gimp,Xcf,Python Fu,我有一个嵌套层结构的XCD文件: image front-layer content-layer content-layer-name-1 content-layer-name-2 content-layer-name-3 back-layer 我用image=pdb.gimp\u file\u load(xcf\u file,xcf\u file)打开文件,可以将前层、内容层和后层作为image.layers[0]、im
image
front-layer
content-layer
content-layer-name-1
content-layer-name-2
content-layer-name-3
back-layer
我用image=pdb.gimp\u file\u load(xcf\u file,xcf\u file)
打开文件,可以将前层
、内容层
和后层
作为image.layers[0]
、image.layers[1]
和image.layers[2]
。但是Gimp不能通过列表索引获得内容层中的子层
我可以使用pdb.gimp\u image\u按名称获取层(image,'content-layer-name-3')
,但我不知道层的名称
我尝试了pdb.gimp\u item\u get\u children(image.layers[1])
,但此方法返回带有项的子项列表的INT32ARRAY
,我还没有找到如何通过其id检索项
如何使用Gimp(2.8)中的Python从组层获得子层?Gimp Python在这个开发周期中几乎没有得到维护(这在很大程度上可以归咎于我自己)
为数不多的更新之一是创建了“Item”类,并在其上实现了一个class方法,该方法允许使用PDB方法返回的数字ID来检索一个项
因此,您可以使用pdb.gimp\u item\u get\u children(组层)
,并在
返回的子项ID使用gimp.Item.from\u ID
检索实际层
这里是一个GIMP控制台部分,我在其中“手动”检索子层:
多亏了这个故障,我在将插件从2.6更新到2.7~2.8的过程中遇到了同样的问题。以下是已编辑的函数:
def find_layer_by_name (image, name):
for layer in image.layers:
#check if layer is a group and drill down if it is
if pdb.gimp_item_is_group(layer):
gr = layer
gr_items = pdb.gimp_item_get_children(layer)
for index in gr_items[1]:
item = gimp.Item.from_id(index)
if item.name == name:
return item
# if layer is on the first level
if layer.name == name:
return layer
return None
您现在只需检查“层”属性,然后从中检索子层。请记住,与包含其他组的组一样,可能有两个以上级别的层。
Date: Fri Apr 20 04:49:16 2012 -0300
pygimp: adds proper support for layer groups
Layer groups where barely supported using numeric IDs and
by calling gimp.Item.from_id. This adds a Python
GroupLayer class.
def find_layer_by_name (image, name):
for layer in image.layers:
#check if layer is a group and drill down if it is
if pdb.gimp_item_is_group(layer):
gr = layer
gr_items = pdb.gimp_item_get_children(layer)
for index in gr_items[1]:
item = gimp.Item.from_id(index)
if item.name == name:
return item
# if layer is on the first level
if layer.name == name:
return layer
return None