Как получить слой с python в gimp?

#python #gimp

Вопрос:

Я хочу получить определенный слой в gimp с помощью python.

У меня есть изображение с двумя слоями. Я нашел команду, которая num_layers, layer_ids = pdb.gimp_image_get_layers(image)

когда я выполняю команду, я получаю вывод

 num_layers = 2
layer_ids  = (5, 4)
 

Я нашел команды layer = pdb.gimp_image_get_layer_by_name(image, name) и layer = pdb.gimp_image_get_layer_by_tattoo(image, tattoo) .

Как мне получить определенный слой?

Ответ №1:

  • Если вы хотите определить, на каком уровне должен работать ваш скрипт/плагин, при регистрации плагина следует объявить параметры, начинающиеся с PF_IMAGE и PF_DRAWABLE. Они будут установлены для изображения и активного слоя при вызове скрипта.
  • Вы также можете получить активный слой с помощью image.active_layer , но это опасно, ваш плагин мог быть вызван для маски или канала, обычно это делается с помощью предыдущего метода. Этот метод имеет свои преимущества при попытке что-то сделать в консоли Python-fu.
  • Если вы создали слой в своем скрипте, он был возвращен вызовом API, поэтому сохраните его в переменной, чтобы использовать позже.
  • Для конкретного слоя, это будет зависеть от критериев, вы можете
    • фильтр по имени: [l from image.layers if l.name='XXX'][0] ,
    • фильтр по положению в стеке:
      • image.layers[0] для верхней части,
      • image.layers[-1] для «Фона» внизу.
    • Вы также можете найти первый видимый или связанный.

    Но делать это, как правило, плохая идея.

  • Если вы хотите извлечь слой из предыдущей обработки, вы можете «татуировать» его ( pdb.gimp_item_set_tattoo(item, tattoo) где tattoo -целое число, которое вы выбираете в качестве подписи), а затем извлечь его при последующей обработке с помощью pdb.gimp_image_get_layer_by_tattoo(image, tattoo) ). Татуировка будет сохранена как часть изображения и, таким образом, сохранится после рабочего сеанса.