Следующий скрипт предназначен для вызова через интерфейс GIMP CLI, и он меняет цветовые режимы всех PNG в текущем каталоге на индексированные:
(define (script-fu-batch-indexify pattern)
(let* ((filelist (cadr (file-glob pattern 1))))
(while (not (null? filelist))
(let* ((filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image))))
(gimp-image-convert-indexed image NO-DITHER MAKE-PALETTE 256 0 0 "")
(gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
(gimp-image-delete image))
(set! filelist (cdr filelist)))))
Этот скрипт работает хорошо, но требует, чтобы каждый PNG в текущем каталоге не индексируется. Он немедленно прервется, когда найдет проиндексированный PNG. Я намерен заставить его пропускать индексированные PNG. Я считаю, что лучше всего это сделать так:
(define (script-fu-batch-indexify pattern num-cols)
(let* ((filelist (cadr (file-glob pattern 1))))
(while (not (null? filelist))
(let* ((filename (car filelist))
(image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
(drawable (car (gimp-image-get-active-layer image))))
(unless (gimp-drawable-is-indexed image) ; Now it does not work anymore...
(gimp-image-convert-indexed image NO-DITHER MAKE-PALETTE num-cols 0 0 "")
(gimp-file-save RUN-NONINTERACTIVE image drawable filename filename)
(gimp-image-delete image)))
(set! filelist (cdr filelist)))))
Но это мешает скрипту работать! Он выполняется без ошибок и без индексации неиндексированных PNG. Я пробовал использовать if
с теми же результатами. Итак, что я здесь ошибаюсь?
(я использую Gimp 2.8.22 вместо Linux Mint 19.3.)