画像をベクトル化(SVGやEPSに変換)したいけどIllustratorが使えず、オンラインの変換サービスも利用できない場合、PotraceやAutoTraceなどのオープンソースを使う手があります。AutoTraceはPotraceよりも前段の画像処理が充実していて;
- 細線化できる
- カラー画像を処理できる
などのアドバンテージがありますが最近あまり知られていないようなので、基本的な使い方をご紹介したいと思います。(各オプション等の詳細は続編で)
動作環境
AutoTraceは主にLinux上で動作します。
最近はWindows版もリリースされていますが、最新(0.31.10)のWindows版はどういうわけかうまく動作しないです。(資材にlibglibやlibgobjectなどのdllが同梱されているが、exeからの依存関係がない??)
リリース前の版(travis-20200219.65)は動作しますが、PNGが読み込めない、SVG出力の場合はsvgタグにxmlns属性が埋め込まれない等の制限があるようです。
なのでLinux版をおすすめします。
導入
RHELの8や9(クローン含む)ではパッケージに採用されています。
RHELの10や他のLinuxではGitHubからソースをダウンロードしてビルドする必要があります。ソースをダウンロードし展開したら、INSTALLの「1. Basic Installation」に書かれている通りにすれば、特に何事もなくビルドされインストールが完了します。
使い方
$ autotrace input.bmp
で画像をベクトル化したEPSが標準出力に出力されます。
SVGにする場合は
$ autotrace input.bmp -output-format svg
とします。
ファイルに出力するにはリダイレクトするか
$ autotrace input.bmp -output-file output.svg
とします。この場合「-output-format svg」は省略できます。
さまざまな対象の処理例
例1 単色塗りつぶしパターン
もっとも基本的な使い方です。毛筆や万年筆などで手書きされた文字からロゴマークデザインを起こす、などの利用シーンが想定されます。
-
入力画像
形状のバリエーション(直線、曲線、コーナー)が網羅され、ベクトル化の結果がほどよい複雑さになるように手作りした画像例です。

-
出力EPS(図形表現部分のみ抜粋)
行末mは「moveto」でカレント位置の移動、lは「lineto」で直線、cは「curveto」で3次ベジェ曲線、fは「closepath」で輪郭を閉じて塗りつぶすことを表します。
10 33 m
69 12 l
69.001 22.404 73.966 29.253 75.671 39 c
77.152 47.465 74.308 54.539 77.615 63 c
81.189 72.144 92.085 83.964 90 94 c
73.095 89.729 64.067 70.828 48 64.999 c
36.198 60.718 35.831 77.911 27.042 79.079 c
22.311 79.707 21.762 71.011 20.783 68 c
19.157 62.996 15.176 59.040 13.843 54 c
12.046 47.209 12.019 40.076 10 33 c
f
- この図形表現をプロットすると以下のようになります。
各ベジェ曲線は$G^1$連続で接続されています(接点で接線の方向が一致)。ただし、右上の「耳」の先端だけそうなっていませんが、これはコーナーが検出されたからです。
例2 線画イラスト
AutoTraceの細線化の機能を用いる例です。
- 入力画像
ChatGPTに描いてもらった線画イラストのサンプルです。
- 出力
オプションに細線化の「-centerline」と、スペックル除去の「-despeckle-level 20」を指定してEPSにしました。
左はベジェ曲線と直線の制御点のプロット(EPSなので左下原点)です。おおむね良好にベクトル化されています。右はこれをInkscapeで画像化(エクスポート)したものです。
例3 カラーイラスト(輪郭線なし)
ベクトル化の特性上、処理できるのは少ない色数でフラットに塗り分けられた画像に限られます。海外のサイトに濃淡画像の処理例が示されている場合がありますが、本来は苦手です。
- 入力画像
※出典:ビジソザのフリー素材 - 受付No13-スポーツジム受付のイラスト
→ 元は135色あったのを15色に減色(あらかじめImageMagickなどで色数を減らしておいたほうが良い結果が得られます)
- 出力(SVGを画像化)① オプションなし
同一色の領域ごとに輪郭抽出するので、領域間に丸めの相違によるすき間ができます。また、口の形が歪んでいます。
- 出力② オプション「-error-threshold 1」を設定 →すき間が低減
- 出力③ オプション「-despeckle-level 20」を追加 →口の形の歪みが低減
例4 カラーイラスト(輪郭線あり)
輪郭線と塗りつぶしによるイラスト(いわゆるアニメ絵など)で、ベクトル化にはあまり向きませんが、需要が多そうな種類の画像です。
元画像(PNG)のファイルサイズが79KBのところ、SVGは453KBになりました。オプションやパラメータを調節すればベクトル化の精度は向上(すき間が低減)しますが、SVGのサイズはさらに大きくなる方向です。レイヤーわけなど工夫が必要そうです。



