Преоразмеряване на платното и промяна на разделителната способност в Script-Fu Gimp върху индексирано изображение

Аз съм малко нов в Script-Fu и трябва да направя промяна на разделителната способност от 600DPI на 300DPI и след това преоразмеряване на платното до 1000px W на 2000px H, като оставям действителния размер на изображението непокътнат. Иначе снимката ми се разтяга.

Сигурен съм, че сценарият трябва да върви нещо подобно на този, който намерих. Но този по-специално се оплаква, че моето изображение е индексирано и иска 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")

person McGafter    schedule 30.05.2012    source източник


Отговори (1)


Използвате gimp-layer-new, за да създадете нов слой тип RGB - този тип слой не може да бъде добавен към индексирано изображение.

Много други script-fu извиквания може да са ограничени за индексирани изображения - и има начини да ги заобиколите - но тук не е така

Стойността с типа на слоя е "0", която поставяте точно преди параметъра "име на слоя". Според документацията (видима с помощта на „Браузър на процедури“ в менюто за помощ на GIMP), има изброяване за типовете слоеве и трябва да подадете INDEXEDA-IMAGE към него за индексирани изображения (0 е за RGB-IMAGE).

Важно е да използвате именуваните константи, както са показани в документацията, а не числата, които представляват, тъй като не е гарантирано, че тези числа ще останат еднакви във версиите и поради факта, че използването на имената добавя контекст и четливост към вашия код.

По същия начин не трябва да използвате "10" за режим на слой, а по-скоро подходящото константно име, което ви подхожда (LIGHTEN-ONLY-MODE в GIMP 2.6)

person jsbueno    schedule 31.05.2012