2

我对 Script-Fu 有点陌生,需要将分辨率从 600DPI 更改为 300DPI,然后将画布大小调整为 1000px W x 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")
4

1 回答 1

2

您正在使用 gimp-layer-new 创建一个新的 RGB 类型图层 - 这种类型的图层不能添加到索引图像中。

许多其他 script-fu 调用可能会被限制为索引图像 - 并且有一些方法可以解决它们 - 但这里不是这种情况

图层类型的值是您在“layername”参数之前放置的“0”。根据文档(使用 GIMP 帮助菜单中的“Procdure Browser”可见),有一个图层类型的枚举,您应该将 INDEXEDA-IMAGE 传递给它,用于索引图像(0 表示 RGB-IMAGE)。

重要的是使用文档中显示的命名常量,而不是它们所代表的数字,因为这些数字不能保证在不同版本中保持不变,并且由于使用名称会增加上下文和可读性代码。

同样,您不应将“10”用于图层模式,而应使用适合您的适当常量名称(GIMP 2.6 中的 LIGHTEN-ONLY-MODE)

于 2012-05-31T18:03:28.203 回答