使用Python解析SVG文件路径

时间:2013-12-27 22:23:37

标签: python svg

我正在开发一个机器人项目,从一个Android运行设备拍照然后发送到cloudconvert.org将其转换为SVG,然后所有SVG路径将被转换为xy坐标并连续发送到机器人手臂将用笔打开或关闭它们。

所以我在这个项目中已经走了这么远,我现在唯一的问题是将SVG文件解析为路径列表作为字符串列表。

我尝试了minidom,但似乎它的工作我可以实际访问SVG文件,但我无法访问路径数据例如'M 100,200 L 200.300'而不是我得到

>>> from xml.dom import minidom
>>> xmldoc= minidom.parse("C:\Users\DELL\Desktop\drawing-1.svg")
>>> a=xmldoc.getElementsByTagName("svg")[0]
>>> b=a.getElementsByTagName("g")[0]
>>> pth=b.getElementsByTagName("path")[0]
>>> pth
<DOM Element: path at 0x1bb6238>

我只想将dom对象中的数据作为字符串访问,当我尝试

>>> print (str(pth))

没有任何内容只显示两个空白行,然后再次出现>>>

2 个答案:

答案 0 :(得分:5)

这是一个旧线程,但由于接受的答案中的链接不再适用于我处理svg路径的方法。

有一个svg.path模块,它提取路径和其他形状,并提供处理它们的方法。

from xml.dom import minidom
from svg.path import parse_path

svg_dom = minidom.parseString(svg_string)

path_strings = [path.getAttribute('d') for path in svg_dom.getElementsByTagName('path')]

for path_string in path_strings:
    path_data = parse_path(path_string)

    #  now use methods provided by the path_data object
    #  e.g. points can be extracted using 
    #  point = path_data.pos(pos_val) 
    #  where pos_val is anything between 0 and 1

答案 1 :(得分:2)

我一直在研究同样的问题我的解决方案是这样的: 1.使用http://guilhermemussi.com/conversor.html转换svg到多边形的路径 2.使用相对简单的python脚本来提取点列表。这是我的代码,它可能有点麻烦/不合适但它完成了工作

scribble=open("scrib1.txt")
for line in scribble:
    if line.startswith("<polygon"):
        rightline=line.split('"')
commas=rightline[13].split(' ') 
newlist=[]
for i in commas:
    tup=i.split(',')
    newlist.append((tup[0],tup[1]))