【问题标题】:Parsing SVG file paths with Python使用 Python 解析 SVG 文件路径
【发布时间】:2014-01-15 12:18:59
【问题描述】:

我正在开发一个机器人项目,该项目从运行 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))

什么都没有出现,只是两个空行然后&gt;&gt;&gt; 再次出现。

【问题讨论】:

  • 感谢您帮助我格式化我的帖子 Nicolas :)
  • 您可以发布您的 SVG 文件之一吗?或者至少有足够的文件我们可以看到它的结构?
  • 文本“M 100..”等是路径的属性吗?尝试 pth['attrib_name'] (无论名称是什么)
  • 如果this question是可信的,你需要打电话给pth.getAttribute('d')
  • 我用记事本打开了我的 svg 文件,但属性 d 没有在一个小括号内标记它就像这样 ''

标签: python svg


【解决方案1】:

这是一个旧线程,但由于已接受答案的链接在这里不再有效,这是我处理 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

【讨论】:

  • pip install svg.path
【解决方案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]))

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2013-06-04
    • 2020-03-22
    相关资源
    最近更新 更多