にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

コマンドラインでSVGのストロークをアウトライン化する

SVG ファイルに含まれるストロークをパスに変換(アウトライン化)することをコマンドラインから行い、自動化したかった。

Inkscape CLI

そこで、フリーソフトウェアのドローツールである Inkscape を利用する。
GUI からはメニューの「パス」→「ストロークをパスに変換」からアウトライン化が可能である。

さて、この Inkscapeコマンドラインインターフェースを持つ。
このCLIに --select オプションによってオブジェクトを指定し --verb オプションでそれに対する操作を行うことが可能であるらしい。

例えば、参考サイトの例を引用すると、

inkscape --select=path616 --verb ObjectFlipVertically --verb FileSave \
         --verb FileClose violin_key_flipped.svg

(参考 1.)

このコマンドは、ファイル violin_key_flipped.svg を開き、 path616 オブジェクトを「縦方向に反転して」「ファイルを保存し」「ウィンドウを閉じる」ということができるようだ。


verb については --verb-list オプションで一覧を出力できる。

inkscape --verb-list

今回は、

EditSelectAll: 全オブジェクトまたは全ノードを選択 (Ctrl+A)
StrokeToPath: 選択オブジェクトのストロークをパスに変換 (Ctrl+Alt+C)

が関係ありそう。

SVGファイルに含まれる全てのオブジェクトのストロークをアウトライン化する

それでは、標題のことを実行するコマンドは、次の様になる。

inkscape --verb EditSelectAll --verb StrokeToPath \
         --verb FileSave --verb FileClose filename.svg

SVGファイル filename.svg を開き「全てのオブジェクトを選択」し、その「選択したストロークをアウトライン化」して、「ファイルに保存(上書き保存)」し、「ウィンドウを閉じる」という手順である。

GUI いらないので --without-gui を指定したかったのだけど、そうした場合、

WARNING: ignoring verb EditSelectAll - GUI required for this verb.
WARNING: ignoring verb StrokeToPath - GUI required for this verb.
WARNING: ignoring verb FileSave - GUI required for this verb.

って出たので、GUIは必須のようだ。これだとウィンドウが現れて消えることになる。

雑感

GUIは(特にWindowsでは)起動するのに時間かかるので、どうにかならないものか。スクリプトと組合せるとか…?
本当は SVG の内容を標準入力に流し込み、GUIなしで処理し、結果を標準出力に流すまでできると楽なのだが…まあ、自動化はできそうなのでとりあえずは良しとする。