Gimp 2.8 Plugin Script - Как добавить новый GroupLayer?

Документация/соглашение об именах PDB довольно обратная, если вы пытаетесь делать что-то с python в gimp и трудно понять. В конце концов я нашел gimp.GroupLayer (списки PDB gimp-layer-group-new), чтобы создать новую группу слоев. Как вставить это в изображение, чтобы оно отображалось как группа слоев?

Я пробовал такие вещи:

img = gimp.image_list()[0]
gl = gimp.GroupLayer(img, "Should be a folder", 1, 1, 0)
img.insert_layer(gl)

Первое, что меня действительно смущает, это то, что он ожидает, что я укажу высоту и ширину для GroupLayer, хотя он должен просто действовать как контейнер для других реальных слоев (он ожидает этого, потому что он наследуется от Layer, но это другой вопрос) .

Настоящая проблема заключается в том, что когда я вставляю только что созданный GroupLayer, он отображается как обычный слой (без папки на значке слоя). Я проверил это, создав два слоя, один обычный слой и один составной слой. Я добавляю групповой слой к изображению, а затем пытаюсь добавить обычный слой к изображению с групповым слоем в качестве родителя:

img = gimp.image_list()[0]
gl = gimp.GroupLayer(img, "Group Layer", 1, 1, 0)
l = gimp.Layer(img, "Real Layer", 1, 1, 0)
img.insert_layer(gl)
img.insert_layer(l, gl) # gl should be the parent

Все, что я получаю, это ошибка:

Calling error for procedure 'gimp-image-insert-layer':
Item 'group layer #1' (34) cannot be used because it is not a group item`

Кто-нибудь еще понял это?

ОБНОВЛЕНИЕ

Жоао С. О. Буэно

Я только что исправил эту проблему в gimp-git. Frgom gimp 2.8.12 включен,
вызов gimp.GroupLayer работает с сигнатурой gimp.GroupLayer(img, [name="", opacity=100.0, mode=gimp.NORMAL_MODE]).


person d0c_s4vage    schedule 26.09.2012    source источник
comment
Вы можете попробовать отправить письмо автору GIMP-python. Он говорит в документах, что это не завершено.   -  person stark    schedule 27.09.2012
comment
Люди, указанные как авторы GIMP Python на любой веб-странице, давно ушли из проекта. Что нужно сделать, это отправить список разработчиков по почте или заполнить отчет об ошибке на bugs.gnome.org.   -  person jsbueno    schedule 27.09.2012


Ответы (1)


Похоже, что в создании gimp.GroupLayer есть ошибка - и он ведет себя как обычный слой, хотя тип объекта в Python отображается как групповой слой.

Однако можно создать слой рабочей группы через PDB, используя pdb.gimp_layer_group_new(img) — на этот раз это еще одна ошибка, объект отображается в Python как обычный объект Layer — но после вставки его в образ с pdb.gimp_image_insert_layer(image, layer, <parent (use None for top level)>, <position>) он работает правильно (и получение объекта через атрибут «слой» изображения даст вам правильный объект GroupLayer).

Извините за это - по большей части это моя вина - я посмотрю, смогу ли я исправить поведение для следующего GIMP 2.8 - GIMP 2.8 почти не поддерживает группы слоев из Python вообще.

обновление: Начиная с GIMP 2.8.12, вызов gimp.GroupLayer(image, ...) создает правильную группу слоев.

person jsbueno    schedule 26.09.2012
comment
классно, спасибо большое! У меня не было возможности попробовать это в своем плагине, но, похоже, вы знаете, о чем говорите :^) Еще раз спасибо! - person d0c_s4vage; 27.09.2012
comment
Я не пробовал, но после создания группы слоев с вызовом pdb img.insert_layer тоже должен работать. - person jsbueno; 27.09.2012
comment
Еще раз спасибо за вашу помощь и за то, что указали мне правильное направление. У меня сейчас все работает. Плагины Gimp могут быть довольно забавными! :D - person d0c_s4vage; 28.09.2012