ГИМП Скрипт-Фу Выгрузка слоев в пнг - 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))))))

Оцени полезность:

12   голосов , оценка 4.083 из 5