(define (script-fu-make-border img layer bordersize bordercolor flag-copy flag-cut) ;; 前処理 (let* ((old-fg (car (gimp-palette-get-foreground))) (old-bg (car (gimp-palette-get-background))) (layer-position (gimp-image-get-layer-position img layer)) (width (car (gimp-image-width img))) (height (car (gimp-image-height img))) (border-layer (car (gimp-layer-new img width height RGBA-IMAGE "Border" 100 NORMAL-MODE))) (copy-layer 0) ) (gimp-undo-push-group-start img) ;;縁取りレイヤー作成 (gimp-image-add-layer img border-layer -1) (gimp-image-lower-layer img border-layer) (gimp-drawable-fill border-layer TRANS-IMAGE-FILL) ; 透明でレイヤーを初期化 ;;縁取り領域作成 (gimp-selection-layer-alpha layer) (gimp-selection-grow img bordersize) (gimp-palette-set-foreground bordercolor) (gimp-edit-fill border-layer FOREGROUND-FILL) (if (= flag-copy FALSE) ;;レイヤーをコビーするか ( ;; コピーしないので何もしない ) (begin (set! copy-layer (car (gimp-layer-copy layer 1))) ;;レイヤーを複製して (gimp-image-add-layer img copy-layer -1) (set! border-layer (car (gimp-image-merge-down img copy-layer 1))) ;;下のレイヤー(エッジレイヤー)と統合 ) ) ; end of if (if (= flag-cut FALSE) ;;くりぬくか ( ;; なにもしない ) (begin (gimp-selection-layer-alpha layer) ;;もとのレイヤーから選択領域を作り ; (gimp-edit-fill border-layer TRANS-IMAGE-FILL) ;;透明色で塗りつぶし ; (gimp-edit-cut border-layer) ;; カット (gimp-edit-clear border-layer) ;;透明色で塗りつぶし ) ) ; end of if ;; 後処理 (gimp-selection-none img) (gimp-palette-set-foreground old-fg) (gimp-palette-set-background old-bg) (gimp-undo-push-group-end img) (gimp-displays-flush) ) ) (script-fu-register "script-fu-make-border" "/Filters/ボーダー作成..." "ボーダーを作ります。" "Akira M" "Akira M" "May 17, 2009" "RGB*" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-ADJUSTMENT "ボーダーサイズ (ピクセル)" '(3 1 250 1 1 0 0) SF-COLOR "ボーダー色" '(0 0 0) SF-TOGGLE "レイヤーをコピー" FALSE SF-TOGGLE "中をくりぬく" FALSE )