コマンドライン(command line)で、画像ファイルjpg, png, bmp等をsvgへ変換するには、ソフトウェアである「Inkscape」 もしくは 「Potrace」を用いる方法があります。本記事では、これらをPythonスクリプトで実行する雛形コードを載せました。
下図はjpg画像の例です。テキストとして開くと意味不明です。これはラスタ(raster)形式と呼びます。

一方、下図はsvg画像の例です。本プログラムを用いて変換したものです。テキストとして開くと文字や数値が記載されていています。これをベクタ(vector)形式と呼び、画像の形状輪郭などが数値, 数式で表されます。

そのため、svgファイルはCADソフトで読み込むことが可能です。下図は、svgファイルを「FreeCAD」で読み込み、押し出しで3次元構造を作成したものです。

ここで、注意点があります。拡張子がsvgであっても、数値ではなくてイメージとして記録されてる場合のフォーマットもあります。下図は、コマンドラインによるsvg変換に「Inkscape」を用いた場合です。svgへ変換できてますが、意味がわからない文字列が並んでる様子です。この場合、CADソフトでは読み込めません。

ちなみに、「Inkscape」をGUIで使用した場合は、CADで読み込めるsvgを作成できます。「Potrace」ではコマンドラインで出来ます。
■本プログラム
「Potrace」は読み込み画像ファイルは.bmpの必要があるため、pillowを使用してjpgやpngをbmpへ変換するコードも含めています。
from glob import glob
import os
from PIL import Image
import subprocess
inkscape = r"C:\Program Files\Inkscape\bin\inkscape.exe"
potrace = r"D:\00_backup\01_new\potrace-1.16.win64\potrace.exe"
def png2svg(file_path):
print('png2svg', file_path, '...')
root, ext = os.path.splitext(file_path)
output_file_path = f'{save_dir}{root}_inkscape.svg'
cmd_list = [inkscape, '--actions="select-all;selection-trace:256,0,1,1,4,1.0,0.20;export-filename:'+output_file_path+';export-do;"',
file_path, '--batch-process']
subprocess.call(cmd_list, shell = True)
print('finished')
def bmp2svg(file_path):
print('bmp2svg', file_path, '...')
root, ext = os.path.splitext(file_path)
output_file_path = f'{save_dir}{root}_portrace.svg'
if ext != '.bmp':
img = Image.open(file_path)
img.save(f'{save_dir}{root}.bmp', 'bmp')
file_path = f'{save_dir}{root}.bmp'
cmd_list = [potrace, '-s', file_path, '-o', output_file_path]
subprocess.call(cmd_list, shell = True)
print('finished')
if __name__ == '__main__':
save_dir = './save_dir/'
file_list = glob('./*.jpg')
file_list.extend(glob('./*.png'))
file_list.extend(glob('./*.bmp'))
print(file_list)
for file in file_list:
bmp2svg(file)
print('End')
以上
<広告>
リンク
リンク