へびねこ技研

個人的なメモなど.

InkscapeでPNGからDXFに変換する

メモです.まだ手探ってます.一応DXFにはできました.

Inkscapeで透過PNGからDXFに変換しようとしたら思ったより詰まったので書いておきます.

結論としてのやり方(※完全に互換にはできない)

  1. Inkscapeの『ファイル』=>『新規』で新規ファイルを作る.
  2. 『ファイル』=>『名前を付けて保存』でsvgファイルにする.
  3. 『ファイル』=>『インポート』でPNGをインポート.
  4. 対象のPNGを選択している状態で『パス』=>『ビットマップのトレース』を選択.『Multiple Scan』を選択.Scan回数などのパラメータを調整して目的の解像度が得られるまで試行錯誤する.(生成されたベクター画像は同レイヤー内の別オブジェクトとして元のPNGの真上に位置している)
  5. 生成されたベクター画像オブジェクトをドラッグして避け,元になったPNGを削除
  6. 一度保存して閉じる(ここまでsvgのまま)
  7. もう一回開く
  8. 『ファイル』=>『名前を付けて保存』でdxfにする

環境

Macbook pro 13-inch 2020 (macOS Catalina ver10.15.7)

Inkscape 1.0.1 (c497b03c, 2020-09-10)

Inkscapeについて

Inkscapeはフリーの画像描画ソフトです.詳しいことが知りたかったら調べてください.

Inkscapeの導入については省略します.V1.0.1になってXQuartzとかなくても単体で使えるように&64bit対応してくれてめーっちゃ☆助かる……

ダウンロードページのリンク

Download Inkscape 1.0.1 | Inkscape

何で詰まったのか

結論から書くと完全に可換な形で変換するのは無理です.これはベクター画像とビットマップ画像で根本的に描画方法が違うことによります(ここをわかってませんでした).

ベクター画像はその名の通り『ベクトル』で描画します(幾何学的に数式表現で境界を与えます).対してビットマップ画像は『塗りつぶす』ことによって面に色を塗っていくような描画方法になります.

ベクター画像 - Wikipedia 

ビットマップ画像 - Wikipedia

そのため,ビットマップ画像をベクター画像にするためには『塗りつぶしによってできた境界を無数の数式で近似表現する』必要があります(この操作が冒頭に出てきた『ビットマップのトレース』です.一発で近似表現が見つかるわけもないので,複数回走査(=Multiple Scan)して精度を上げたりなんだりをする必要があります).

やった過程

PNGを直接開いて『名前をつけて保存』だと死

検索して『一回PDF or SVG形式で保存』で行けるらしい=>無理でした

dxf保存するときに出てくるパラメータ指定が悪さしてるのか?=>総当り=>無理

テキストをdxfにするときは『オブジェクトをパスへ』が必要らしい=>試す=>無理

ここで『ビットマップのトレース』の項目を見つける=>ググる=>いけそう=>保存できない

=>ここからが『一回PDF or SVG形式で保存』なのでは?=>確立

課題

残念ながら『トレース』なので完全に互換にはできない

元画像の精度・寸法が高精度大画像だとトレース精度が出るけどそうでないとトレースしきれない

もともとが幾何学的図形だと高精度でトレースしてくれるけど,手書きなど非幾何学的な対象はトレース精度が低い(変な点群が残ったりする)

 

もう少しなんとかしたいですね……<ねこのなまえ>