Potraceでラスタ画像をベクタ画像に変換
トレースしたり最初から高解像度で描き直したり、面倒な時はFlashでベクターに分解して使っていたのですが、potraceと言うツールでベクター化出来る事を知りました。
Potraceは幅広いOSに対応したラスタ→ベクタ変換ツールで、ソースコード、コンパイル済みのバイナリの他、OSXを使っているならfinkから(少しバージョンが古いですが)入手出来るようです。
使用はCUIでの操作が前提ですが、Windowsなら直接EXEファイルにD&Dでも変換でき、バッチファイルやAutomatorを使えばコマンドを意識するのも最初だけです。また、OSX用ですがGUIフロントエンドを配布している方もおられます。
使ってみた
お絵描き掲示板で描いた絵をpotraceを使ってベクタ画像に変換してみました。
バイナリを解凍して適当なディレクトリに配置してコマンド入れます。
[Macintosh:~] LOGINUSER% Desktop/potrace-DIR/potrace Desktop/foo.bmp

この画像が…

設定無しでもこんな感じに変換してくれます。凄い。
単純に入力ファイルを指定するだけでも綺麗にベクター化してくれますが、多数のオプションを組み合わせる事でより複雑な処理を行う事も出来るようです。
例えばpotrace -is INPUTFILEと指定すれば、諧調反転したSVGとして出力できます。
次の様な二値化がはっきりしていない絵や写真も変換出来ます。

流石にちょっと辛い、と言うか意味が無いかも。グラデーションが無い絵か、Photoshopでポスタリゼーション処理して色毎にレイヤー分けすれば何とかなるかも。
カクカクした絵が思った以上に上手く変換されたのでアンチエイリアスが効いた絵ならもっと良い具合に変換されるんじゃないの?と思ったんですが、素で変換すると線が途切れました。しきい値の調節等が必要ですね。

変換前に
変換する元データを二値化やコントラストの調節を行い、ビットマップ(BMP)形式に変換しておきます。
二値化等は省いても問題無さそうですが、なるべく正確なトレースを期待するなら予め色の差を出した方が良いかも。potraceで試行錯誤する手間も省けると思います。
以下、試し。
画像を未加工で変換
→

プレビュー(3.0.4)でガンマ値等を変えた画像を変換
→

低解像度で描いた絵も綺麗にベクタ画像に変換出来るので、DTP素材、イラストや漫画。WebでもSVGとして出力したり、Flash用データ作成など使い道は沢山ありそうです。
とても便利なソフトを公開されているPeter Selingerさんに感謝感謝。
参考URL : Peter Selinger: Potrace
Potrace オプション
もう少し役に立つエントリになるように使えるオプションの説明を追記しました。
使ってないオプションも適当かつ曖昧な日本語に(翻訳どころか意訳ですら無いです)してますので、正確に知りたい場合はpotraceに含まれるREADMEを読んでみて下さい。
turnpolicy
他を修正しました。
Potraceに関するオプション
-h,--help- ヘルプを表示して終了
-v,--version- バージョンを表示して終了
-l,--license- ライセンスを表示して終了
-V,--show-defaults- コンパイル時に設定された変換設定を表示
--progress- 変換時にプログレスバーを表示
入出力に関するオプション
-o,--output <file>- 出力するファイル名を指定
バックエンド(ファイルの種類の事だと思います)に関するオプション
-e,--eps- EPSとして出力(指定が無い場合のデフォルト)
-p,--postscript- ポストスクリプトとして出力
-s,--svg- SVGとして出力
-g,--pgm- PGMとして出力
-b,--backend <name>- 名前でバックエンドを指定する(拡張子を指定しろって事でしょうか、gimppath,xfig)
変換に関するオプション
-z,--turnpolicy <policy>- 分岐した線の処理を指定、デフォルトはminoriy(Black,White,right,reft,minority,majority)
-t,--turdsize <n>- ゴミを無視するレベル、デフォルトは2(多分px単位だと思います)
-a,--alphamax <n>- 角の閾値を指定、デフォルトは1
-n,--longcurve- カーブの最適化に関するオプション(のようですがどうなるのか不明)
-O,--opttolerance <n>- カーブ最適化の精度、デフォルトは0.2(効果不明です)
-u,--unit <n>- …なんだろう。ユニット(?)辺りのピクセル数を指定する(…のかな。使ってみましたが何が変わったのか…)
-d,--debug <n>- デバッグの出力タイプを指定、n=1,2,3
縮尺と配置に関するオプション
-W,--width <dim>- 出力画像の横幅を指定
-H,--height <dim>- 出力画像の高さを指定
-r,--resolution <n>[x<n>]- 解像度をDPIで指定
-x,--scale <n>[x<n>]- 拡大縮小率を指定、PGMで出力する場合使用出来るようです
-S,--stretch <n>- 縦横比、1を超える値を設定するとY方向、1以下0以上でX方向に伸びます。
-A,--rotate <angle>- 角度を指定して時計回りに回転
-M,--margin <dim>- 余白を指定
-L,--leftmargin <dim>- 左の余白を指定
-R,--rightmargin <dim>- 右の余白を指定
-T,--topmargin <dim>- 上の余白を指定
-B,--bottommargin <dim>- 下の余白を指定
出力オプション
-C,--color #rrggbb- 線(塗り潰された部分)の色、標準は黒
--fillcolor #rrggbb- 線に囲まれた部分の色、標準は透明(抜き)
--opaque- 白い部分を透明にする、らしいです。SVG用かな
--group- パスをグループ化する、らしいです。SVG用だと思いますが…
ポストスクリプトとEPSのオプション
-P,--pagesize <format>- ページのサイズを指定、デフォルトはletter(a4, a3, a5, b5, letter, legal, tabloid, statement, executive, folio, quarto, <dim>x<dim>)
-c,--cleartext- 圧縮せずに出力
-2,--level2- ポストスクリプトレベルを2に設定
-3,--level3- ポストスクリプトレベルを3に設定
-q,--longcoding- ファイルサイズを最適化する
PGMのオプション
-G,--gamma <n>- アンチエイリアシングのガンマ値を設定、標準は2.2
フロントエンド(?)のオプション
-k,--blacklevel <n>- 二値化するための閾値を設定、標準は0.5(平たく書くと「グレーを白に振るか黒に振るか」を設定します)
-i,--invert- 階調を反転して出力
補足
<>で囲んだ指定がありますがカッコは不要です。nは数値になります。dimは寸法(mm、cmやpt)で指定するようです。
次の例はOSXのターミナルでの操作ですが、DOS窓でも同じような感じだと思います。
potraceまでのパスを記述するのが面倒な場合は実行ファイルをターミナルにD&Dして下さい。自動的に実行ファイルまでのフルパスが挿入されます。
USER% /Applications/potrace/potrace -M 2cm -C #336699 -r 74 -A 45 -W 10cm -H 10cm -t 0 -o ~/Desktop/hoge/hoge.eps ~/Desktop/jony.bmp
上のような指定で『1pxのドットも見逃さず(-t 0)、2cmのマージンを取って(-M 2cm)、幅10cm(-W 10cm)、高さ10cm(-H 10cm)、解像度74dpi(-r 74)、塗り潰し部分を腐った青色し(-C #336699)、45度回転させて(-A 45)、デスクトップのjony.bmpを(~/Desktop/jony.bmp)デスクトップの”hoge"フォルダにhoge.epsと言う名前で(~/Desktop/hoge/hoge.eps)変換出力する』指定になります。
出力場所に存在しないフォルダを設定しても自動的にフォルダを作ってはくれませんので、予め用意しておく必要があります。
それと、上書き警告は無いようなので注意しましょう。
大半の場合、変換後に違うツールで編集するので、大きさや解像度をpotraceで設定する事は少ないと思いますが、変換に関する設定は色々工夫すれば狙った出力結果が得られるのではないでしょうか。
ファイル毎にコマンドを変えないのであれば、Windowsユーザならバッチファイル、OSXユーザならAutomatorに設定しておくと楽です。
私はAutomatorでやっつけてますが、コンテキストメニューから簡単に変換出来て便利ですよ。おすすめ。
一番シンプルに記述するなら以下のようになります。

- 2006.05.28 Sunday
- CG painter
- 15:27
- comments(0)
- trackbacks(4)

- by faro