我想在特定路径(这是一个茶壶)上获得一组点。我创建了路径并使用“ 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无法很好地格式化吗(我对此表示怀疑)?或者是其他东西?
绳索将不胜感激!