ГИМП Скрипт-Фу Выгрузка слоев в пнг - Lisp
Формулировка задачи:
Нижеприведенный скрипт перебирает все слои, берет их имена и сохраняет в картинки png.
Пожалуйста, помогите мне подредактировать код, т.к. с Scheme Script-Fu
знаком первый день, программирую на ООП языках. Нужно, чтобы, если в имени слоя был символ «-», то слой НЕ сохраняется в png картинку.
..
(define (script-fu-export-layers img drw path outnameformat) ; credit to Vijay Mathew on Stack Overflow for the expand keywords function (let ((expand-keywords (lambda(format tokens) (let loop ((slist (string->list format)) (in-replace-mode #f) (result "")) (if (not (null? slist)) (let ((c (car slist))) (cond (in-replace-mode (let ((token (car (cdr (assoc c tokens))))) (loop (cdr slist) #f (string-append result token)))) ((char=? c #\~) (loop (cdr slist) #t result)) (else (loop (cdr slist) #f ( string-append result (make-string 1 c)))))) result))))) ДЕЛАТЬ ПРОВЕРКУ НА СИМВОЛ ВИДИМО НАДО ГДЕ-ТО В НИЖЕПРИВЕДЕННОМ БЛОКЕ КОДА (for-each (lambda (layer) (let* ( (name (expand-keywords outnameformat `( (#\~ "~") (#\i ,(car(gimp-image-get-name img))) (#\l ,(car(gimp-drawable-get-name layer)))))) (outpath (string-append path "/" name))) (gimp-file-save RUN-NONINTERACTIVE img layer outpath name) )) (vector->list(cadr (gimp-image-get-layers img))))) ) (script-fu-register "script-fu-export-layers" "Экспорт слоёв" "Экспортирует слои в отдельные изображения в формате PNG" "Stuart P. Bentley <removed@mail.ru>" "(C) 2011 by Stuart P. Bentley" "June 28, 2011" "*" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-DIRNAME "Выбрать папку для сохранения" "" SF-STRING "Формат имени изображений\ (~i = Имя изображения\ ~l = Имя слоя\ ~~ = ~)" "~l.png" )
Решение задачи: «ГИМП Скрипт-Фу Выгрузка слоев в пнг»
textual
Листинг программы
(use-modules (srfi srfi-43)) (define (script-fu-export-layers img drw path outnameformat) ; credit to Vijay Mathew on Stack Overflow for the expand keywords function (let ((expand-keywords (lambda (format tokens) (let loop ((slist (string->list format)) (in-replace-mode #f) (result "")) (if (not (null? slist)) (let ((c (car slist))) (cond (in-replace-mode (let ((token (car (cdr (assoc c tokens))))) (loop (cdr slist) #f (string-append result token)))) ((char=? c #\~) (loop (cdr slist) #t result)) (else (loop (cdr slist) #f (string-append result (make-string 1 c)))))) result))))) (let ((layers-count (vector-length (cadr (gimp-image-get-layers img))))) (vector-for-each (lambda (layer) (let* ((name (expand-keywords outnameformat `((#\~ "~") (#\i ,(car(gimp-image-get-name img))) (#\l ,(car(gimp-drawable-get-name layer)))))) (outpath (string-append path "/" name))) (if (not (string-position #\c name)) (gimp-file-save RUN-NONINTERACTIVE img layer outpath name)))) (cadr (gimp-image-get-layers img))))))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д