LINUX.ORG.RU

ошибка выполнения скрипта в Gimp (Scheme)

 , ,


0

1

Появилась у меня задача, подогнать список фоток под заданный размер. Решил разобраться с языком Scheme, использующимся в Gimp 2.6 (как я смог понять, это аналог LISP) Собственно проблема в чем, при выполнении из Scheme Console всей последовательности команд, ошибки нет. Запускаю скрипт на работу с одним файлом - выдает ошибку. Как я смог понять падает на строчке "(gimp-image-resize image newWidth newHeight (/ (- newWidth (car (gimp-image-width image))) 2) 0)". При отдельном прописывании этой строчки в консоль Ским - все работает. Вот сам код, буду признателен за подсказки, в каком направлении копать.

(define (scale-and-resize file newWidth newHeight)
 (let*
  (
   (image (car (gimp-file-load RUN-NONINTERACTIVE file "")))
   (drawable (car (gimp-image-active-drawable image)))
   (oldW (car (gimp-image-width image)))
   (oldH (car (gimp-image-height image)))
  )
  (gimp-image-scale image (/ (* oldW newHeight) oldH) newHeight)
  (gimp-image-resize image newWidth newHeight (/ (- newWidth (car (gimp-image-width image))) 2) 0)
  (gimp-file-save RUN-NONINTERACTIVE image drawable file "")
 )
)
  (script-fu-register
    "scale-and-resize"                        ;func name
    "Scale And Resize"                                  ;menu label
    "Scale by height, and resize by width."              ;description
    "Alex Koeln-Frei"                             ;author
    "copyright 2012, Alexandr Koeln-Frei"        ;copyright notice
    "April 17, 2012"                          ;date created
    ""                     ;image type that the script works on
    SF-STRING     "Filename"       ""    
    SF-VALUE      "New Width"      "298"
    SF-VALUE      "New Height"     "376"
  )
  (script-fu-menu-register "scale-and-resize" "<Image>/Image/Transform")
 

Не аналог, а один из диалектов. А вот по теме - хз, не люблю скобочки.

kosc ()
Ответ на: комментарий от Alexnord

Оформление кода ужасное. Переноси аргументы функций на новые строки. Закрывающие скобки, наоборот, не переноси :)

power ()
Ответ на: комментарий от power

Окей, спасибо, буду знать :) Просто по привычке открывающую/закрывающую скобку ставлю на одном уровне :) Второй день только знаком с языком ^_^

Alexnord ()

Вместо SF-STRING используй SF-FILENAME, банально удобней. Не знаю в чем ошибка, но у меня работает вполне неплохо. Работает без обвязки begin, и вообще оно там не нужно.

spoilt ★★★ ()
Ответ на: комментарий от spoilt

Нихрена не лучше. Грамотно расставляй отступы и пользуся правильными редакторами.

Если сомневаешься, почитай любой хороший лиспокод. Ну и попробуй в коде, написанном в стиле ТС, обернуть какой-нибудь участок в тот же begin.

power ()
Ответ на: комментарий от power

Я знаю, что у лисперов и схемеров принято так верстать код, но уже как три года сам понемногу разрабатываю под GIMP и не могу принять для себя такие правила верстки кода. Я примерно про вот такой код:

(define make-promise
  (lambda (proc)
    (let ((result-ready? #f)
          (result #f))
      (lambda ()
        (if result-ready?
            result
            (let ((x (proc)))
              (if result-ready?
                  result
                  (begin (set! result-ready? #t)
                         (set! result x)
                         result))))))))

В таком месиве даже нельзя понять есть ли там все скобки. Даже не каждый редактор такое нормально подсветит. В GitHub и во всем интернете это нечитабельно также.

spoilt ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.