カワハラの、雑多な記録。

GIMPで塗りつぶしの境界を拡張して線画の下に回り込ませるスクリプト

      2016/11/04

LINEスタンプを制作する方法 — 目次 — に戻る

GIMPで絵(線画)を書いて、塗りつぶしツールで塗った時、線画の内側が綺麗に塗れない。
そんなふうに困ったことはありませんか?
この記事では、その問題の解決策を提供したいと思います。

塗りつぶしツールの問題点

例えばペンツールを使ってこういうカエルの絵を描いたとします。

kaeru_line

あ、絵のクオリティについては、ツッコミ無用でお願いします。
マウスで描いたので、あまり上手に描けませんでした。と一応言い訳をしておきます。

で、この後色を塗るんですが、この線を描いたレイヤーの下に塗り用のレイヤーを作ることが多いかと思います。
ここまでは良いんですが、バケツの塗りつぶしツールで、塗りレイヤーに色を塗ると、こうなってしまいます。
(ちなみに、塗りレイヤーに塗るために、塗りつぶしツールの「見えている色で」オプションにチェックを入れておきます。
そうしないと全体が緑色になってしまいますので。)

bucket

この画像を見ると、黒の線と、みどりの塗りの間に隙間ができています。

これは、全然ダメダメですよね。
ちゃんと塗れてないということです。

なんでこういうことになるのかというと、ペンツールで描いた線の縁はちょっとぼかしがかかったようになっていて、線と線以外の境界がはっきりしていないためです。

line-zoom

このはっきりしない部分に色が乗っていないというわけです。

そこで、塗りつぶしツールの「しきい値」をいじればこの問題をちょっとマシにする事が出来ます。
しきい値を150に設定して、もう一度塗りつぶしツールで塗った画像がこちらです。

bucket2

見た感じ、ほぼきれいに塗れていますね。

はい。一件落着。
解決です。

「しきい値」とは、似た色が連続している場合、どこまで塗りの範囲に含めるかを決める値です。
0にすると完全に同じ色の箇所しか塗られませんが、数値を大きくすると少し色が違っていても塗る範囲に含まれるようになります。
つまり、線のふちがぼやけていて、はっきりしない所も塗りの範囲に含まれたと言うことです。

実は解決していない!

ぱっと見、完璧ですが、下の画像を見てください。

on-off

背景のレイヤーを赤、白と切り替えると、青丸部の境界が若干ですが透けているのが分かるでしょうか?
いや、分かりにくいですね。
とにかく、黒の線と緑の塗りの間に、透明部分があるということです。

一見するとOKですが、実は完璧ではない。こういうのが一番困りますよね。

鉛筆ツールで塗る方法

確実な解決策として、「鉛筆ツールで塗る」と言う手があります。

pencil

こんな風に、境界をまず塗ります。
この時、緑色は塗りレイヤーに塗り、黒い線の下に若干かぶる(潜りこむ)ように重ねます。

pencil-clear

分かりやすいように線画を半透明にしたらこうなります。
線画の下に塗りがかぶっているのが分かると思います。

こうすることで、黒い線と緑の塗の間に透明部分を作らず、きっちりと塗ることができます。

境界部分が塗れたら、後は鉛筆のサイズを大きくして中心部を一気に塗ってもいいですし、塗りつぶしツールで塗っても良いと思います。

鉛筆ツールはペンツールと違ってせんの縁にぼかしがかからず、境界がはっきりしているので、塗りつぶしツールで塗っても綺麗に塗ることが出来ます。

ファジー選択 → 選択範囲拡張 → 塗りつぶしツールと言う方法

鉛筆ツールで塗る方法でやっている人も多いはずですが、若干面倒くさいですよね。
線画を描いた後に、塗る範囲を描くと言う作業が発生することになります。

そこで登場するのが「ファジー選択」ツールです。
ファジー選択は、簡単に言うと似た色の範囲を選択してくれるというもの。

fuzzy-icon

先の日かった魔法の杖みたいなのがファジー選択ツールです。

ファジー選択のオプションにも「しきい値」の設定があり、塗りつぶしツールのしきい値と同じ意味です。
つまり、どの程度似た色までを選択範囲に含めるかを調整する値。

fizzu-option

この値を適当に100~150くらいに設定し、塗りたい箇所をクリックすると選択されます。
オプションの「見えている色で」のチェックも入れておきましょう。
これが入っていないと、今編集中のレイヤーのみにしか選択が効きません。
つまり、塗りレイヤーを編集中だと、いくらファジー選択しても線画の塗りたい範囲を選択できない事になります。

その後、塗りつぶしツール(オプションで「塗りつぶす範囲」を「選択範囲」にします)で塗るんですが、そのままではさっきの塗りつぶしツールの見つかった場合と同じ結果になってしまいます。

そこで人手間かけて、メニューの「選択」→「選択範囲の拡大」→2px位に設定して「OK」します。
そうすると、選択範囲が設定した2px分太くなります。
ようやく塗りつぶしツールの出番となり、選択範囲の中を塗りつぶします。

fuzzy

結果がこれ。

fuzzy-clear

線画を半透明にしてみると、塗りがしっかりと線の下まで潜り込んでいるのが確認できます。

手順をまとめると、

  1. 塗りたい範囲をファジー選択
  2. 選択範囲の拡大
  3. 塗りつぶしツール

Shiftを押しながら次々とファジー選択すると、選択範囲が追加されていきますので、同じ色で塗りたい範囲をすべて選択した後に、選択範囲の拡大 → 塗りつぶし、とすれば多少手間が省けます。

ファジー選択 → スクリプト実行

上の方法だと、鉛筆ツールのように塗る範囲を描くという作業が省けるので、ちょっと楽ですね。
でも、ファジー選択後に、メニューから「選択範囲の拡大」を呼び出して、塗りつぶしツールに切り替えて塗った後、またファジー選択ツールに切り替えて…、と言うのが面倒くさいですよね。

この微妙な面倒臭さが嫌だったので、もうちょっと楽にできる方法として、スクリプトを使う方法を紹介します。

まずファジー選択ツールで塗りたい範囲を選択。
ツールのオプションの設定は、さっきと同じく、

  • しきい値 100くらい
  • 見えている色で オン

とします。

塗りレイヤーがアクティブになっているのを確認して、あるスクリプトを実行。
これで選択範囲が2px広がり、現在の色で選択範囲を塗りつぶしてくれます。

fuzzy

このスクリプトにショートカットキーを設定していればもっと便利!
ファジー選択ツールで塗りたい範囲をクリック → ショートカットキーでスクリプト実行、とテンポよく連続して塗ることが出来ます。

スクリプトの中身

スクリプトはこうです。

(define (script-fu-grow-bucket-kk image drawable)
    (gimp-selection-grow image 2)
    (gimp-edit-bucket-fill drawable FG-BUCKET-FILL NORMAL-MODE 100 128 TRUE 1 1)
    (gimp-displays-flush)
)
;------------------------------------------------------------------
(script-fu-register "script-fu-grow-bucket-kk"
    _"KK grow bucket"
    _"ファジー選択後にスクリプトを起動すると、選択範囲を2px拡張し現在の色で塗りつぶす。"
    "Kawahara"
    "Kawahara"
    "2016-08-17" ;
    ""
    SF-IMAGE "Image" 0
    SF-DRAWABLE "Drawable" 0
)
(script-fu-menu-register "script-fu-grow-bucket-kk"
                         "<Image>/Script-Fu")

これを書いたテキストファイルを”grow-bucket.scm”の名前で保存し、GIMPのScriptsフォルダに入れます。

そしてGIMPを再起動するか、メニューの「フィルター」→「Script-Fu」→「スクリプトを再読み込み」すると、メニューに「Script-Fu」と言う項目ができているかと思います。
この中の「KK grow bucket」を実行することで利用できます。

選択範囲を2px広げるというのが気に入らない場合は、2行め辺りの最後の方の「2」を「1」でも「3」でも好きな数字に書き換えて調整出来ます。
ダイアログボックスを表示して数値を入力するようにも出来ますが、作業のテンポが悪くなるため、あえて「2」で固定としています。

スクリプトは、ファジー選択ツールの範囲を拡張して塗りつぶす方法と同じことをやっています。
あの方法を自動化したものと思えば分かりやすいですかね。

スクリプトのファイルは、下記のリンクからダウンロードすることも出来ます。

grow-bucket.zip

まとめ FireAlpacaならこんな面倒なことしなくても出来る

お手軽に使えるお絵かきソフトで「FireAlpaca(ファイヤアルパカ)」と言うのがあるんですが、実はFireAlpacaの塗りつぶし(バケツ)ツールなら、こんな面倒くさいことしなくても標準で出来るんです。
バケツツールのオプションで「拡張」を1~3px選択でき、線の下に重なるように塗りの範囲を広げてくれます。

今回のスクリプトを作ろうと思いついたのも、そんなFireAlpacaのバケツツールが便利だったからです。
この機能をなんとかGIMPでも使えないかと考えた末、スクリプトの作成までたどり着きました。

はじめはScript-Fuのことが全く分からない状態で、スクリプトの書き方の勉強から始めたのでかなりの時間を消費してしまいましたが…

でもこのScriput-Fu、GIMPで出来ることの幅を広げてくれるので、覚えておいて損はありませんよ!

LINEスタンプを制作する方法 — 目次 — に戻る

 - その他