#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.