Я пытаюсь получить массив точек на определенном пути (это чайник). Я сделал путь и экспортировал его с помощью программ «Inkscape» и «Gimp».
Я пытаюсь проанализировать файл svg (по сути, файл XML), используя библиотеку svgpathtools
и особенно функцию parse_path
. Нормальное поведение parse_path
состоит в том, чтобы хорошо разобрать "d-строку" SVG и создать объект 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", line 112, 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, который плохо его форматирует (я в этом сомневаюсь)? Или что-то другое?
Веревка будет принята с благодарностью !!