亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python分析inkscape路徑數據

發布時間:2022-09-15 10:22:21 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么用python分析inkscape路徑數據”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么用python分析inkscape路徑數據”文章能幫助大家解決問題。

inkscape生成路徑

設置文檔屬性:

怎么用python分析inkscape路徑數據

設置網格:

怎么用python分析inkscape路徑數據

導入png圖像作為參考:

怎么用python分析inkscape路徑數據

注意導入圖像、文檔屬性,都是已左下角為原點:

怎么用python分析inkscape路徑數據

在圖層與對象屬性欄,修改圖像可見性、鎖定圖像:

怎么用python分析inkscape路徑數據

在當前圖層之上新建一個圖層,用來繪制路勁
隨意繪制矩形,并做好相應的形狀,比如兩個矩形之間切割可通過菜單:路徑->差集

怎么用python分析inkscape路徑數據

將形狀轉換為路徑

理論上保存完之后,就有svg文件可以進行路徑轉換,但是由于svg文件格式復雜,會有各種各樣的形狀數據,所以這里需要把各種形狀統一轉換為路徑,以便python進行簡單解析

那么上面的例子就需要再進一步處理:

  • 如果對象是rect或其他形狀,執行菜單:路徑->對象轉路徑

  • 對于組合路徑的形狀,執行菜單:路勁->分割路勁

最后得到圖層如下:

怎么用python分析inkscape路徑數據

保存svg文件后,再用記事本將其打開,會看到如下關鍵內容:

     <g
     inkscape:groupmode="layer"
     id="layer2"
     inkscape:label="圖層 2"><path
       
       d="m 510.66797,509.15234 3.82812,8.50586 h 3.92383 v -8.50586 z"
       id="path21706" /><path
       
       d="m 504.25195,509.15234 v 8.50586 h 8.14258 l -3.82812,-8.50586 z"
       id="rect3684" /></g>

其中有兩條path數據都是以m打頭,以z結尾,說明數據已經準備妥當。

python分析svg

這里采用正則表達式分析,并將結果輸出為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")

運行后得到數據:

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路徑數據”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

育儿| 宁津县| 焉耆| 土默特左旗| 山西省| 通辽市| 蒙自县| 凤冈县| 韶山市| 运城市| 湘西| 平果县| 珲春市| 娱乐| 柳江县| 兴城市| 泗水县| 天柱县| 琼结县| 延安市| 晴隆县| 福泉市| 蓝田县| 乌恰县| 丹凤县| 黔江区| 黑水县| 宁陵县| 沈丘县| 崇仁县| 莲花县| 莆田市| 额尔古纳市| 忻州市| 富蕴县| 紫阳县| 蓬莱市| 峨山| 宁乡县| 泽普县| 横峰县|