最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python分析inkscape路徑數(shù)據(jù)方案簡單介紹

 更新時間:2022年09月14日 17:05:09   作者:皮爾斯巴巴羅  
這篇文章主要介紹了python分析inkscape路徑數(shù)據(jù)方案簡單介紹,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下

前言

開發(fā)過程中有時需要使用路徑數(shù)據(jù),雖然python有自己的svg或其他矢量庫,但這里只是出于實驗的目的,沒必要深入研究,所以采用一些簡單的方案:用inkscape生成svg,然后python分析并輸出,從而達到相應目的

inkscape生成路徑

設置文檔屬性:

設置網(wǎng)格:

導入png圖像作為參考:

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

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

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

將形狀轉換為路徑

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

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

  • 如果對象是rect或其他形狀,執(zhí)行菜單:路徑->對象轉路徑
  • 對于組合路徑的形狀,執(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="path11706" /><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結尾,說明數(shù)據(jù)已經(jīng)準備妥當。

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")

運行后得到數(shù)據(jù):

result={
{
id="path11706",
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ù)方案簡單介紹的文章就介紹到這了,更多相關python inkscape內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream

    Python干貨實戰(zhàn)之逆向登錄世界上最大的游戲平臺Stream

    有些網(wǎng)頁中的數(shù)據(jù)進行了算法加密 這些算法代碼是JavaScript 加密的地方就是在js文件里,我們需要破解這些算法加密 就需要了解這加密的過程 獲取加密過程中的代碼 然后進行后續(xù)的反反爬蟲操作
    2021-10-10
  • Django中redis的使用方法(包括安裝、配置、啟動)

    Django中redis的使用方法(包括安裝、配置、啟動)

    下面小編就為大家分享一篇Django中redis的使用方法(包括安裝、配置、啟動),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • python程序 線程隊列queue使用方法解析

    python程序 線程隊列queue使用方法解析

    這篇文章主要介紹了python程序 線程隊列queue使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python清空文件并替換內(nèi)容的實例

    Python清空文件并替換內(nèi)容的實例

    今天小編就為大家分享一篇Python清空文件并替換內(nèi)容的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • selenium+python自動化測試之頁面元素定位

    selenium+python自動化測試之頁面元素定位

    這篇文章主要介紹了selenium+python自動化測試之頁面元素定位,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 基于Django快速集成Echarts代碼示例

    基于Django快速集成Echarts代碼示例

    這篇文章主要介紹了基于Django快速集成Echarts代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • python讀取與處理netcdf數(shù)據(jù)方式

    python讀取與處理netcdf數(shù)據(jù)方式

    今天小編就為大家分享一篇python讀取與處理netcdf數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python逆向之pyc反編譯的使用教程

    python逆向之pyc反編譯的使用教程

    python代碼的運行是靠python解析器將源代碼轉換為字節(jié)碼,本文主要介紹了python逆向之pyc反編譯的使用教程,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python如何實現(xiàn)SSH遠程連接與文件傳輸

    Python如何實現(xiàn)SSH遠程連接與文件傳輸

    這篇文章主要介紹了Python如何實現(xiàn)SSH遠程連接與文件傳輸問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python簡單實現(xiàn)TCP包發(fā)送十六進制數(shù)據(jù)的方法

    Python簡單實現(xiàn)TCP包發(fā)送十六進制數(shù)據(jù)的方法

    這篇文章主要介紹了Python簡單實現(xiàn)TCP包發(fā)送十六進制數(shù)據(jù)的方法,結合實例形式簡單分析了Python實現(xiàn)TCP數(shù)據(jù)傳輸及發(fā)送十六進制數(shù)據(jù)包的相關技巧,需要的朋友可以參考下
    2016-04-04

最新評論

麻栗坡县| 平顶山市| 佛教| 大方县| 当涂县| 汝南县| 竹溪县| 平和县| 南康市| 乐陵市| 新乡县| 绥宁县| 郎溪县| 汽车| 射洪县| 濮阳市| 清河县| 宁南县| 福建省| 元氏县| 工布江达县| 鲁山县| 武穴市| 黎川县| 沙湾县| 宜良县| 城口县| 苍山县| 东阳市| 桐梓县| 玉树县| 韶关市| 竹北市| 云阳县| 温泉县| 临朐县| 临高县| 历史| 大足县| 绥中县| 兴海县|