我想使用python解析SVG文件以提取坐标/路径(我相信这是在“路径”ID下列出的,特别是d =“...”/>)。该数据最终将用于驱动2轴CNC。
我在SO和Google上搜索了可以返回这些路径字符串的库,以便我可以进一步解析它,但无济于事。这样的图书馆存在吗?
答案 0 :(得分:25)
忽略变换,您可以从SVG中提取路径字符串,如下所示:
from xml.dom import minidom
doc = minidom.parse(svg_file) # parseString also exists
path_strings = [path.getAttribute('d') for path
in doc.getElementsByTagName('path')]
doc.unlink()
答案 1 :(得分:7)
使用svgpathtools获取d-string可以在一行或两行中完成。
from svgpathtools import svg2paths
paths, attributes = svg2paths('some_svg_file.svg')
路径是svgpathtools路径对象的列表(仅包含曲线信息,没有颜色,样式等)。 attributes 是存储每条路径属性的相应字典对象列表。
然后打印出d字符串......
for k, v in enumerate(attributes):
print v['d'] # print d-string of k-th path in SVG
答案 2 :(得分:2)
问题在于提取路径字符串,但最后需要绘制线条的命令。基于最小化的答案,我添加了svg.path解析路径以生成线条绘制坐标:
#!/usr/bin/python3
# requires svg.path, install it like this: pip3 install svg.path
# converts a list of path elements of a SVG file to simple line drawing commands
from svg.path import parse_path
from xml.dom import minidom
# read the SVG file
doc = minidom.parse('test.svg')
path_strings = [path.getAttribute('d') for path
in doc.getElementsByTagName('path')]
doc.unlink()
# print the line draw commands
for path_string in path_strings:
path = parse_path(path_string)
for e in path:
if type(e).__name__ == 'Line':
x0 = e.start.real
y0 = e.start.imag
x1 = e.end.real
y1 = e.end.imag
print("(%.2f, %.2f) - (%.2f, %.2f)" % (x0, y0, x1, y1))