[英]Parsing SVG file paths with Python
我正在開發一個機器人項目,該項目從 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))
什么都沒有出現,只有兩個空行然后>>>
再次出現。
這是一個舊線程,但由於來自已接受答案的鏈接在這里不再有效,這是我處理 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. 使用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]))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.