簡體   English   中英

使用 Python 解析 SVG 文件路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM