Неверный идентификатор для аргумента 'layer' в GIMP script-fu - PullRequest
0 голосов
/ 12 апреля 2019

Я использую следующий сценарий для пакетной обработки некоторых файлов изображений с помощью GIMP script-fu:

       (let* ((filename (car filelist))
              (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
              (imagelayer (car (gimp-image-get-layers image)))
              (bglayer (car (gimp-layer-new image 8400 5939 1 ""bg"" 100 LAYER-MODE-NORMAL))))
         (gimp-image-add-layer image bglayer 1)
         (gimp-layer-set-offsets (car (gimp-image-get-layers image)) 0 870)

Строка 2 загружает изображение, строка 3 получает один слой изображения, строка 4создает новый фоновый слой, строка 5 добавляет новый слой к изображению, а строка 6 устанавливает смещения слоя изображения.

Однако строка 6 выдает следующую ошибку:

GIMP-Error: Calling error for procedure 'gimp-layer-set-offsets':
Procedure 'gimp-layer-set-offsets' has been called with an invalid ID for 
argument 'layer'. Most likely a plug-in is trying to work on a layer that 
doesn't exist any longer.

Я попытался изменить строку 6 на следующую, но я получаю ту же ошибку:

         (gimp-layer-set-offsets imagelayer 0 870)

Странно то, что ошибка не появляется всегда, иногда процедура проходит без ошибки.

Это ошибка в GIMP или ошибка в моем скрипте?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Возможное объяснение состоит в том, что тип слоя с жестким кодом (1: RGBA-IMAGE) несовместим с типом изображения (например, с индексированием цвета (*) ...), поэтому ваш слой не добавляется к изображению. Попробуйте либо принудительно задать тип изображения (gimp-image-convert-rgb), либо установить для типа слоя значение, совместимое с типом изображения (gimp-image-base-type, или повторно использовать тип существующего слоя).

(*) AFAIK (в редких случаях) JPG в оттенках серого, более частые PNG с цветовой индексацией, а также GIF.

0 голосов
/ 24 апреля 2019

gimp-image-get-layer возвращает список из 2 значений, количество слоев и список идентификаторов слоев.

Используя автомобиль, вы выбрали использование значения количества слоев в качестве идентификатора слоя.

Попробуйте вместо этого использовать gimp-image-get-active-layer.

...