本篇內(nèi)容主要講解“如何用python分析inkscape路徑數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用python分析inkscape路徑數(shù)據(jù)”吧!
我們提供的服務有:網(wǎng)站制作、網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、龍泉ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的龍泉網(wǎng)站制作公司
設置文檔屬性:
設置網(wǎng)格:
導入png圖像作為參考:
注意導入圖像、文檔屬性,都是已左下角為原點:
在圖層與對象屬性欄,修改圖像可見性、鎖定圖像:
在當前圖層之上新建一個圖層,用來繪制路勁
隨意繪制矩形,并做好相應的形狀,比如兩個矩形之間切割可通過菜單:路徑->差集
理論上保存完之后,就有svg文件可以進行路徑轉(zhuǎn)換,但是由于svg文件格式復雜,會有各種各樣的形狀數(shù)據(jù),所以這里需要把各種形狀統(tǒng)一轉(zhuǎn)換為路徑,以便python進行簡單解析
那么上面的例子就需要再進一步處理:
如果對象是rect或其他形狀,執(zhí)行菜單:路徑->對象轉(zhuǎn)路徑
對于組合路徑的形狀,執(zhí)行菜單:路勁->分割路勁
最后得到圖層如下:
保存svg文件后,再用記事本將其打開,會看到如下關鍵內(nèi)容:
<g inkscape:groupmode="layer" id="layer2" inkscape:label="圖層 2"><path style="fill:none;stroke:#000000;stroke-width:0.1;stroke-dasharray:none" d="m 510.66797,509.15234 3.82812,8.50586 h 3.92383 v -8.50586 z" id="path21706" /><path style="fill:none;stroke:#000000;stroke-width:0.1;stroke-dasharray:none" d="m 504.25195,509.15234 v 8.50586 h 8.14258 l -3.82812,-8.50586 z" id="rect3684" /></g>
其中有兩條path數(shù)據(jù)都是以m打頭,以z結(jié)尾,說明數(shù)據(jù)已經(jīng)準備妥當。
這里采用正則表達式分析,并將結(jié)果輸出為lua表:
import re import sys f=open("繪圖.svg","r",encoding='utf-8') print("result={") s=f.read() for mg in re.finditer("<g.*?</g>",s,re.S): for mp in re.finditer("<path.*?/>",mg.group(),re.S): path=[] pathid="" md=re.search("\sd=\"(.+?)\"",mp.group(),re.S) if md: last_pos=(0,0) ###################### 1 2 3 4 5 6 7 8 9 for ml in re.finditer("(M[^MmLlHhVvZz]+)|(m[^MmLlHhVvZz]+)|(L[^MmLlHhVvZz]+)|(l[^MmLlHhVvZz]+)|(H[^MmLlHhVvZz]+)|(h[^MmLlHhVvZz]+)|(V[^MmLlHhVvZz]+)|(v[^MmLlHhVvZz]+)|(Z|z)",md.group(1)): if ml.group(1): ###################### 1 3 for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(1)): last_pos=(float(mv.group(1)),float(mv.group(3))) path.append(last_pos) elif ml.group(2): for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(2)): last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]+float(mv.group(3))) path.append(last_pos) elif ml.group(3): for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(3)): last_pos=(float(mv.group(1)),float(mv.group(3))) path.append(last_pos) pass elif ml.group(4): for mv in re.finditer("(-?\d+(\.\d+)?),(-?\d+(\.\d+)?)",ml.group(4)): last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]+float(mv.group(3))) path.append(last_pos) pass elif ml.group(5): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(5)): last_pos=(float(mv.group(1)),last_pos[1]) path.append(last_pos) elif ml.group(6): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(6)): last_pos=(last_pos[0]+float(mv.group(1)),last_pos[1]) path.append(last_pos) elif ml.group(7): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(7)): last_pos=(last_pos[0],float(mv.group(1))) path.append(last_pos) elif ml.group(8): for mv in re.finditer("(-?\d+(\.\d+)?)",ml.group(8)): last_pos=(last_pos[0],last_pos[1]+float(mv.group(1))) path.append(last_pos) elif ml.group(9): path.append(path[0]) mid=re.search("\sinkscape:label=\"(.+?)\"",mp.group(),re.S) or re.search("\sid=\"(.+?)(-\d+)*?\"",mp.group(),re.S) if mid: pathid=mid.group(1) print("{\nid=\""+pathid+"\",") for pos in path: print("Vector2(%f,%f),"%(pos[0],pos[1])) print("},") print("}\n")
運行后得到數(shù)據(jù):
result={ { id="path21706", Vector2(510.667970,509.152340), Vector2(514.496090,517.658200), Vector2(518.419920,517.658200), Vector2(518.419920,509.152340), Vector2(510.667970,509.152340), }, { id="rect3684", Vector2(504.251950,509.152340), Vector2(504.251950,517.658200), Vector2(512.394530,517.658200), Vector2(508.566410,509.152340), Vector2(504.251950,509.152340), }, }
到此,相信大家對“如何用python分析inkscape路徑數(shù)據(jù)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
名稱欄目:如何用python分析inkscape路徑數(shù)據(jù)
文章位置:http://aaarwkj.com/article24/gdsgje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、網(wǎng)站改版、網(wǎng)站營銷、搜索引擎優(yōu)化、用戶體驗、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)