2012-04-19 7 views
4

У меня есть файл XCD с вложенной структурой слоев:Получить подслой из группы слоя с Python в Gimp

image 
    front-layer 
    content-layer 
     content-layer-name-1 
     content-layer-name-2 
     content-layer-name-3 
    back-layer 

я открываю файл с image = pdb.gimp_file_load(xcf_file, xcf_file) и могу получить front-layer, content-layer и back-layer в image.layers[0], image.layers[1] и image.layers[2] , Но Gimp не может получить подслоев в content-layer по списку.

Я могу использовать pdb.gimp_image_get_layer_by_name(image, 'content-layer-name-3'), но я не знаю названия слоев.

Я пробовал pdb.gimp_item_get_children(image.layers[1]), но этот метод возвращает INT32ARRAY с детским списком элементов, и я не нашел способ получения элемента по его идентификатору.

Как я могу получить подслои из группового слоя с Python в Gimp (2.8)?

ответ

7

GIMP Python в основном не контролировался этим циклом разработки (вы можете обвинить многое из этого в себе).

Одним из немногих сделанных обновлений было создание класса «Предмет» - и реализация метода класса на нем, который позволяет использовать числовой идентификатор, возвращаемый методами PDB, для извлечения элемента.

Итак, вы можете использовать, как вы узнали pdb.gimp_item_get_children(group_layer), а на возвращаемом ID для детей используйте gimp.Item.from_id для извлечения фактического слоя.

Вот консольная секция GIMP, где я получить подслой «вручную»:

>>> img = gimp.image_list()[0] 
>>> c = img.layers[0] 
>>> c 
<gimp.Layer 'Layer Group'> 
>>> pdb.gimp_item_get_children(c) 
(1, (4,)) 
>>> c2 = gimp.Item.from_id(4) 
>>> c2 
<gimp.Layer 'cam2'> 
>>> 

** обновление **

Я провел несколько часов хакерских и GIMP 2.8 Окончательные придут с надлежащей поддержкой групп слоев - вам понадобится взломать выше gimp 2.8 RC 1, но если вы сейчас создадите проект из git-сервера, группы слоев будут показаны как экземпляры «GroupLayer» и будут иметь атрибут «слои», который работает так же, как и атрибут «слои» в изображении.

commit 75242a03e45ce751656384480e747ca30d728206

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. 
0

Спасибо за поломки, я боролся с той же проблемой, как я нахожусь в процессе обновления своих плагинов от 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 
+0

Теперь вы можете просто проверить атрибут «слои» и извлечь из него подсловы. Имейте в виду, что может быть более двух уровней слоев, как в группах, содержащих другие группы. – jsbueno

 Смежные вопросы

  • Нет связанных вопросов^_^