テキストの縁取りをする script-fu 書いた

最近、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 を押してください。

f:id:bamch0h:20200223025425p:plain

そのあと、何か文字を画面においてもらって

f:id:bamch0h:20200223025244p:plain

メニュー画面の Script-Fu > 縁取り をクリックすると

f:id:bamch0h:20200224021053p:plain

こんな感じの画面になるので、サイズと色と縁取りしたいレイヤーを選んでOKを押してください。

f:id:bamch0h:20200224024121p:plain

それを押してもらうと選んだ色とサイズで縁取りされます。

f:id:bamch0h:20200223025622p:plain

今後の課題

  • 前景色以外の色でも設定できるようにしたい。