最近、Youtube でもくもく読書配信をするのが日課になりつつありますが、サムネを作る時に見栄えよくするためにテキストの縁取りをしようと思い立ち、私は昔からGimpを使うことが多いので、サムネもGimpで作っていたのですが、Gimpにはテキストの縁取りをしてくれる機能がないみたいで、それなりに複雑な手順を経て縁取りをしないといけませんでした。今回はその手順をボタン一つでできるように script-fu を書いてみました。
; edging_around_text.scm (define (script-fu-edging_around_text size color img drawable) (let* ((width (car (gimp-image-width img))) (height (car (gimp-image-height img))) (index (car (gimp-image-get-layer-position img drawable))) (src-name (car (gimp-layer-get-name drawable))) (dst-name (string-append src-name "-縁取り")) (theLayer (car (gimp-layer-new img width height RGBA-IMAGE dst-name 100 NORMAL-MODE))) (layer-size (car (gimp-image-get-layers img))) (layers (cadr (gimp-image-get-layers img))) (layer 0) (layer-name "") (layer-count 0) ) (gimp-image-undo-group-start img) ; 縁取りレイヤーがあるなら削除 (set! layer-count 0) (while (< layer-count layer-size) (set! layer (aref layers layer-count)) (set! layer-name (car (gimp-layer-get-name layer))) (if (equal? layer-name dst-name) (gimp-image-remove-layer 1 layer)) (set! layer-count (+ layer-count 1)) ) (gimp-selection-layer-alpha drawable) (gimp-selection-grow img size) (gimp-image-add-layer img theLayer (+ index 1)) (gimp-context-set-foreground color) (gimp-edit-fill theLayer FOREGROUND-FILL) ; 表示に反映 (gimp-displays-flush) ; ここまでがアンドゥの対象 (gimp-image-undo-group-end img) )) ; ******** ******** ******** ******** (script-fu-register "script-fu-edging_around_text" "<Image>/Script-Fu/縁取り" "前景色でテキストの縁取りをする" ; このスクリプトの説明 "bamchoh" ; 作者名 "(c)2020" ; コピーライト "2020-02-23" ; 日付 "RGB*, GRAY*, INDEXED*" ; スクリプトが動作可能なモード SF-ADJUSTMENT "Size" '(15 1 1000 1 10 0 SF-SPINNER) SF-COLOR "Color" '(0 0 0) SF-IMAGE "Image" 0 ; 引数1 SF-DRAWABLE "Drawable" 0 ; 引数2 )
使い方としては、上記のスクリプトを %APPDATA%\GIMP\2.10\scripts
に 好きな名前で保存してもらってから Gimpを起動して Filters
> Script-Fu
> Reflesh Scripts
を押してください。
そのあと、何か文字を画面においてもらって
メニュー画面の Script-Fu
> 縁取り
をクリックすると
こんな感じの画面になるので、サイズと色と縁取りしたいレイヤーを選んでOKを押してください。
それを押してもらうと選んだ色とサイズで縁取りされます。
今後の課題
- 前景色以外の色でも設定できるようにしたい。