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

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

Я уверен, что сценарий должен быть примерно таким, как этот, который я нашел. Но этот, в частности, жалуется на то, что мое изображение индексируется, и ему нужно изображение 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», который вы ставите непосредственно перед параметром «имя слоя». Согласно документации (видимой с помощью «Procdure Browser» в меню справки GIMP), существует перечисление типов слоев, и вы должны передать ему INDEXEDA-IMAGE для индексированных изображений (0 для RGB-IMAGE).

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

Точно так же вы не должны использовать «10» для режима слоя, а скорее подходящее постоянное имя, которое вам подходит (LIGHTEN-ONLY-MODE в GIMP 2.6)

person jsbueno    schedule 31.05.2012