SVG路径无法正确解析:svgpathtools,Inkscape

我想在特定路径(这是一个茶壶)上获得一组点。我创建了路径并使用“ Inkscape”和“ Gimp”软件将其导出。

我正在尝试使用库svgpathtools尤其是parse_path函数来解析svg文件(本质上是XML文件)。 parse_path的正常行为是很好地解析SVG的“ d字符串”并创建一个Path对象。

但是,我得到一个错误:

File (...)\parser.py",line 112,in parse_path
  control1 = float(elements.pop()) + float(elements.pop()) * 1j
  ValueError: could not convert string to float: 's'

这是SVG文件的前几行:

  <path id="Sélection"
        fill="none" stroke="black" stroke-width="1"
        d="M 1381.00,143.00
           C 1382.71,149.01 1394.44,175.21 1397.93,180.00
             1400.62,183.69 1402.89,185.74 1405.83,189.00
             1405.83,189.00 1429.69,216.00 1429.69,216.00
             [...]
             1403.00,127.29 1381.00,143.00 1381.00,143.00 Z
           M 2296.00,978.00
           C 2296.00,978.00 2293.17,942.00 2293.17,942.00
             2293.17,942.00 2288.72,891.00 2288.72,891.00
             2288.72,891.00 2276.88,838.00 2276.88,838.00
             [...]
             2315.00,967.85 2296.00,978.00 2296.00,978.00 Z
           M 326.00,1040.00" />

文件长250行。 这是我的代码中有问题的部分:

path = svgpathtools.parse_path(filepath)

这里是完整的,未编辑的错误

Traceback (most recent call last):
  File "c:\Users\vikto\.vscode\extensions\ms-python.python-2019.10.44104\pythonFiles\ptvsd_launcher.py",line 43,in <module>
    main(ptvsdArgs)
  File "c:\Users\vikto\.vscode\extensions\ms-python.python-2019.10.44104\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py",line 432,in main
    run()
  File "c:\Users\vikto\.vscode\extensions\ms-python.python-2019.10.44104\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py",line 316,in run_file
    runpy.run_path(target,run_name='__main__')
  File "C:\Users\vikto\AppData\Local\Programs\Python\Python37-32\lib\runpy.py",line 263,in run_path
    pkg_name=pkg_name,script_name=fname)
  File "C:\Users\vikto\AppData\Local\Programs\Python\Python37-32\lib\runpy.py",line 96,in _run_module_code
    mod_name,mod_spec,pkg_name,script_name)
  File "C:\Users\vikto\AppData\Local\Programs\Python\Python37-32\lib\runpy.py",line 85,in _run_code
    exec(code,run_globals)
  File "c:\Users\vikto\Desktop\Best_dossier_ever\Python\TeapotProj\TeapotProject.py",line 34,in <module>
    path = svgpathtools.parse_path(fpath)
  File "C:\Users\vikto\AppData\Local\Programs\Python\Python37-32\lib\site-packages\svgpathtools\parser.py",in parse_path
    control1 = float(elements.pop()) + float(elements.pop()) * 1j
ValueError: could not convert string to float: 's'

由于CubicBezier函数的参数start,control1,control2,end全部为复杂的a + bj格式,因此我担心该错误可能是由于格式不正确引起的。似乎这里的参数更少!是Inkscape / Gimp无法很好地格式化吗(我对此表示怀疑)?或者是其他东西?

绳索将不胜感激!

yifei86935 回答:SVG路径无法正确解析:svgpathtools,Inkscape

得到答案! 这里的问题是我正在解析整个SVG文件,而不仅仅是“ d-string”部分。 要获取实际的字符串:

dt.strftime("%A,%B,%d %l:%M %p")

在这里,Path_elements是由CubicBezier曲线定义的Path对象的列表。 至于“较少”的点,实际上一条Bezier曲线的终点是另一条曲线的起点,因此不需要5个参数,只需要4个和起点“ M”指令点即可!

高喊@ Mike'Pomax'Kamermans寻求帮助!

本文链接:https://www.f2er.com/3025638.html

大家都在问