; ; line-through.scm ; 主線をレイヤ化します ; ; written by Shinobu Ruho. ; (define (script-fu-line-through img drawable) ; undo グループのはじまり (gimp-undo-push-group-start img) ; 現在の描画色、背景色保持 ; (set! old-fg (car (gimp-palette-get-foreground))) ; (set! old-bg (car (gimp-palette-get-background))) ; 元のレイヤをコピーする。 (set! inv-layer (car (gimp-layer-copy drawable 0))) ; コピーしたレイヤを反転 ; (gimp-invert img inv-layer) ;; for GIMP-1.0.* (gimp-invert inv-layer) ;; for GIMP-1.2 ; 主線のレイヤの生成 (set! width (car (gimp-image-width img))) (set! height (car (gimp-image-height img))) (set! dtype (car (gimp-drawable-type drawable))) (set! line-layer (car (gimp-layer-new img width height dtype "Line-Layer" 100 NORMAL))) ; 新たなレイヤを追加する (gimp-image-add-layer img inv-layer 0) (gimp-image-add-layer img line-layer 0) ; 主線のレイヤを塗りつぶす ; 前景色と背景色の入換(GIMP-1.0.*) ; (gimp-palette-set-foreground old-bg) ; (gimp-palette-set-background old-fg) ; (gimp-edit-fill img line-layer) ;; for GIMP-1.0.* (gimp-edit-fill line-layer 0) ;; for GIMP-1.2 ; 主線のレイヤにレイヤマスクを追加 (gimp-layer-add-alpha line-layer) (set! layermask (car (gimp-layer-create-mask line-layer 0))) (gimp-image-add-layer-mask img line-layer layermask) ; 主線内容をコピー ; (gimp-edit-copy img inv-layer) (gimp-edit-copy inv-layer) ; 主線レイヤのレイヤマスクにペースト ; (set! sel-float (car (gimp-edit-paste img layermask FALSE) ) ) ;; for GIMP-1.0.* (set! sel-float (car (gimp-edit-paste layermask FALSE) ) ) ;; for GIMP-1.2 ; 選択領域の固定 (gimp-floating-sel-anchor sel-float) ; 描画色と背景色を元に戻す(GIMP-1.0.*) ; (gimp-palette-set-foreground old-fg) ; (gimp-palette-set-background old-bg) ; アクティブレイヤを主線レイヤに設定 (gimp-image-set-active-layer img line-layer) ; 元のレイヤをコピーしたものを不可視に設定 (gimp-layer-set-visible inv-layer FALSE) ; 本当はこれで色を反転したレイヤを潰しておきたいんだけど、 ; 入れるとGIMPが落ちる ; (gimp-layer-delete inv-layer) ; undo グループの終わり (gimp-undo-push-group-end img) ; 出力 (gimp-displays-flush) ) (script-fu-register "script-fu-line-through" "/Script-Fu/Original/Line-Through" "Line Through a layer" "Shinobu Ruho" "Shinobu Ruho" "2000" "RGB*, GRAY*" SF-IMAGE "Image" 0 SF-DRAWABLE "Line to Layer" 0)