Недопустимый идентификатор для аргумента ‘layer’ в GIMP script-fu

#gimp #script-fu

#gimp #скрипт-fu

Вопрос:

Я использую следующий скрипт для пакетной обработки некоторых файлов изображений с помощью 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 или ошибка в моем скрипте?

Ответ №1:

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

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

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

Ответ №2:

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

(*) AFAIK есть (редкие) JPG в оттенках серого, и есть более частые PNG с цветовым индексом, а затем есть GIF.