GIMPで絵の縁取りをするスクリプトを書いてみた。
GIMPではScript-Fu
とかいうSchemeのスクリプト処理系が使える。
自作のスクリプトを追加したい場合、Macなら~/Library/Application Support/GIMP/2.8/scripts/
内に.scm
ファイルを追加してやればよい。
script-fu-register
で関数を登録して、メニューから呼び出せるようにする。
GIMPのメニュー>フィルター>Script-Fu>Script-Fu コンソールでコンソールウィンドウが開き、インタラクティブに操作できる(けどあまり試してない…)。
「参照」ボタンで呼び出せる関数が調べられる。
開発時、自作のスクリプトを更新したらメニューの「スクリプトを再読込」で更新を反映させる(この手順がメンドイので自動にだかショートカットキー一発にしたい…)。
ですったもんだしながら画像の縁取りをするスクリプトを作った。
選択中のレイヤーの不透明部分に対して、選択色で4近傍の縁取りをする:
(define (script-fu-outline4 img src-layer) (define (undo-group fn) (gimp-image-undo-group-start img) (fn ) (gimp-image-undo-group-end img)) (define (add-empty-layer ) (let ((index (car (gimp-image-get-layer-position img src-layer))) (width (car (gimp-drawable-width src-layer))) (height (car (gimp-drawable-height src-layer)))) (let ((empty-layer (car (gimp-layer-new img width height RGBA-IMAGE "Outline4" 100 NORMAL)))) (gimp-image-add-layer img empty-layer (+ index 1 )) empty-layer))) (define (fill layer ofsx ofsy) (gimp-image-select-item img CHANNEL-OP-REPLACE src-layer) (gimp-selection-translate img ofsx ofsy) (gimp-edit-fill layer FOREGROUND-FILL)) (undo-group (lambda () (let ((outline-layer (add-empty-layer )) (outline-color (car (gimp-context-get-foreground )))) (gimp-layer-set-name outline-layer (string-append "Outline for " (car (gimp-layer-get-name src-layer)))) (for-each (lambda (offset) (fill outline-layer (car offset) (cadr offset))) '((1 0 ) (-1 0 ) (0 1 ) (0 -1 ))) (gimp-image-select-item img CHANNEL-OP-REPLACE src-layer) (gimp-edit-cut outline-layer) (gimp-selection-clear img) (gimp-image-set-active-layer img src-layer)))) (gimp-displays-flush )) (script-fu-register "script-fu-outline4" "Outline4" "レイヤーの不透明部分を上下左右にずらして枠を作成する" "tyfkda" "copyright 2017, tyfkda" "Febrary 13, 2017" "" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 ) (script-fu-menu-register "script-fu-outline4" "<Image>/Script-Fu/Outline4" )
読み込ませるとメニューにScript-Fu>Outline4>Outline4という項目が追加されるので、選ぶと即実行される。
やってることは単純だけど、まあある程度使えてちゃんと動いたから満足。