#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)
). Татуировка будет сохранена как часть изображения и, таким образом, сохранится после рабочего сеанса.