1 2011-09-30 09:57

Тема: Программирование: не работает скрипт (script-fu)

Очень нужна помощь. Никогда не изучала языки программирования, да и склад ума, видимо, не технический. Сложно въехать... Сегодня накатала такой "скриптик", но он не доделан и не работает.
Никак не могу доделать его, мозгов не хватает.
Смысл скрипта создать поля:
- выцепить ширину и высоту открытой картинки
- определить меньшую сторону, значение меньшей стороны разделить на 25, округлить и умножить на 2
- полученное значение приплюсовать к старым ширине и высоте и создать слой с новыми значениями
- отцентровать слой с картинкой

1. Не могу понять, как из открытой картинки выцепить параметры высоты и ширины.
2. Что нужно вписать вместо "?" в первых двух строках?
3. Почему не получается вписать SF-Image и SF-Drawable в script-fu-registr (gimp начинает ругаться)?
4. Как потом отцентровать картинку?

(define (script-fu-border ?)
(let* ((img (car (gimp-drawable-get-image ?)))
(owidth (car (gimp-image-width img)))
(oheight (car (gimp-image-height img)))
(border (car (if (< oheight owidth) (* 2 (round (/ oheight 25))) (* 2 (round (/ owidth 25))) )))
(width (+ owidth border))
(height (+ height border))
(layer (car (gimp-layer-new img width height 0 “Border-Layer” 100 BEHIND-MODE))) )
(gimp-image-undo-group-start img)
(gimp-image-add-layer img layer 0)
(gimp-image-undo-group-end img) ))
(script-fu-register 
“script-fu-border”
“script-fu-border”
“”
“”
“”
“”
“”
“RGB”)
(script-fu-menu-register 
“script-fu-border”
“/Filters/My scripts”)

Добавлено спустя 1 час 18 минут 38 секунд:

Попробовала переписать скрипт.
Теперь выдает такую ошибку "Error: Invalid type for argument 2 to gimp-file-load ".
В чем смысл ошибки?

(define (script-fu-new filename)
(let*
(
(img (car (gimp-file-load 1 filename filename)))

(drawable (car (gimp-image-get-active-layer img)))

(owidth 
(car (gimp-image-width img)))

(oheight 
(car (gimp-image-height img)))

(border 
(car 
(if 
(< oheight owidth) (* 2 (round (/ oheight 25))) (* 2 (round (/ owidth 25)))
))) 
(width 
(car (+ owidth border)))

(height 
(car (+ oheight border)))

(layer 
(car 
(gimp-layer-new img width height 0 "Border-Layer" 100 BEHIND-MODE)))

)

(gimp-image-undo-group-start img)

(gimp-image-add-layer img layer 0)

(gimp-image-undo-group-end img)

))

(script-fu-register
"script-fu-new"
"Border"
"Create border"
"Dasha"
"Dasha"
"30.09.2011"
"RGB"
SF-IMAGE "" 0
SF-DRAWABLE "" 0
SF-FILENAME "File" "")
(script-fu-menu-register "script-fu-new" "<Image>/Filters/My scripts")

2 2011-10-05 10:24

Re: Программирование: не работает скрипт (script-fu)

Видимо нужно что-то такое:

(define
    (script-fu-border
        Image
        Drawable
    )

    (let* 
        (
        (Width_In (car (gimp-drawable-width Drawable)))
        (Height_In (car (gimp-drawable-height Drawable)))
        (Border (if (> Width_In Height_In) (round(/ Height_In 25)) (round(/ Width_In 25))))
        (New_Width (+ Width_In (* 2 Border)))
        (New_Height (+ Height_In (* 2 Border)))
        )

        (gimp-image-undo-group-start Image)
        (gimp-image-resize Image New_Width New_Height Border Border)
        (gimp-image-flatten Image)
        (gimp-displays-flush) 
        (gimp-image-undo-group-end Image)
    )
)

(script-fu-register "script-fu-border"
            _"<Image>/My-Fu/Border..."
            "Border"
            "BigBoots <tarnoga@gmail.com>"
            "Vladimir Golovin"
            "2011/10/05"
            "*"
            SF-IMAGE "Image" 0
            SF-DRAWABLE "Drawable" 0
)

3 2011-10-05 10:31

Re: Программирование: не работает скрипт (script-fu)

Спасибо, заработало)