2012-05-30 7 views
1

Я немного новичок в Script-Fu и мне нужно сделать смену разрешения от 600DPI до 300DPI, а затем изменить размер холста до 1000px W на 2000px H, оставив фактический размер изображения нетронутым. В противном случае моя картина растягивается.Размер и изменение размера холста в Script-Fu Gimp по индексированному изображению

Я уверен, что сценарий должен идти что-то вроде того, что я нашел. Но этот, в частности, жалуется на то, что мое изображение индексируется, и оно хочет получить изображение RGB. Что я не хочу делать ...

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
; 
; File = script-fu-grow-canvas.scm 
; function name script-fu-grow-canvas 
; 
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
; 
(define 
    (script-fu-grow-canvas 
    theImage 
    theDrawable 
) 
    ; 
    (gimp-image-undo-group-start theImage) 

    (let* 
    (
     ; Define local variables 
     ; imageWidth, imageHeight, centerX, centerY 
     ; Measure the height and width of the image. 
     ; Calculate the center 
     (imageWidth (car (gimp-drawable-width theDrawable))) 
     (imageHeight (car (gimp-drawable-height theDrawable))) 
     (centerX (/ imageWidth 2)) 
     (centerY (/ imageHeight 2)) 
     (tenthWidth (/ imageWidth 8)) 
     (tenthHeight (/ imageHeight 8)) 
     (borderx tenthWidth) 
     (bordery tenthHeight) 
     (newWidth 0) 
     (newHeight 0) 
     (dummyLayer 0) 
     (layername "DummyLayer") 
     ; 
    ) ; End of Variable Declaration 
    ; if Aspect ratio widget is unchecked make X and Y 
    ; length the greater of the two. 
    (set! newWidth (+ imageWidth (* borderx 2))) 
    (set! newHeight (+ imageHeight (* bordery 2))) 
    ; 
    (set! dummyLayer (car (gimp-layer-new 
       theImage 
       imageWidth 
       imageHeight 
       0 
       layername 
       10 
       0)) 
    ) 
    (gimp-image-add-layer theImage dummyLayer 1) 
    (gimp-layer-resize dummyLayer 
       newWidth 
       newHeight 
       borderx 
       bordery) 
    (script-fu-para-tat-layer 
      theImage 
      dummyLayer 
      layername) 

    (gimp-image-resize-to-layers theImage) 
    ; 
    (gimp-drawable-set-visible dummyLayer FALSE) 
    (gimp-image-set-active-layer theImage theDrawable) 

) ; END let* 
    (gimp-image-undo-group-end theImage) 

) ; END define 

(script-fu-register "script-fu-grow-canvas" ; Function Name 
    "02 Expand Canvas" ; Menu Label 
    "Expand the image canvas based on image 
    size"  ; Function Description 
    "Stephen Kiel"   ; Author 
    "2011, Stephen Kiel" ; Copyright 
    "December 2011"  ; Creation Date 
    "*"     ; Valid Image Type 
    SF-IMAGE "theImage" 0 
    SF-DRAWABLE "theDrawable" 0 
) ; End script-fu-register 
(script-fu-menu-register 
    "script-fu-grow-canvas" "<Image>/Flowzilla/Flow - Standard") 

ответ

2

Вы используете садомазо-слой-новые для создания нового типа RGB слоя - этот тип слоя не может быть добавлен в индексированное изображение.

Много другой скрипт-фу вызовов может быть ограничено для индексированных изображений - и есть способы работы вокруг них - но это не тот случай

значение с типом слоя является «0» Вам поставить перед параметром «имя_пользователя». Согласно документации (видимой с помощью «браузера Procdure Browser» в меню справки GIMP), есть перечисление для типов слоев, и вы должны передавать ему INDEXEDA-IMAGE, для индексированных изображений (0 для RGB-IMAGE).

Важно использовать именованные константы, как они указаны в документации, а не числа, которые они представляют, поскольку эти числа не гарантируют неизменность для всех версий и из-за того, что использование имен добавляет контекст и читаемость вашего кода.

Кроме того, вы не должны использовать "10" для режима слоя, а скорее apropriate постоянного имени, которое вам подходит (LIGHTEN-ONLY-MODE в GIMP 2.6)