svg之path詳解及實(shí)例

首先看一下w3c的說(shuō)法


對(duì)于 M L H V Z 比較容易理解,但對(duì)于 C S Q T A 并沒(méi)有很詳細(xì)的解析,初次見(jiàn)面一臉悶逼纬霞。下面借別人總結(jié)的,再來(lái)介紹一遍驱显∈撸可參考此文

M = moveto

Mx,y 移動(dòng)到指定坐標(biāo),xy分別為x軸和y軸的坐標(biāo)點(diǎn)埃疫,類(lèi)似畫(huà)筆的起點(diǎn)伏恐。
path中的起點(diǎn),必須存在(文檔中雖然沒(méi)有提到過(guò)熔恢,但是path的其他命令都需要依賴(lài)一個(gè)初始位置脐湾,而實(shí)際操作過(guò)程中也沒(méi)有需要到可以不使用M的情況,后面發(fā)現(xiàn)有例外我再過(guò)來(lái)補(bǔ)充叙淌。

L = lineto

Lx,y 在初始位置(M 畫(huà)的起點(diǎn))和xy確定的坐標(biāo)畫(huà)一條線秤掌。
兩點(diǎn)一線愁铺,直線,繪圖中很常見(jiàn)的方式闻鉴。

H = horizontal lineto

Hx 沿著x軸移動(dòng)一段位置

V = vertical lineto

Vy 沿著y軸移動(dòng)一段位置

C = curveto

Cx1,y1 x2,y2 x,y 三次貝塞爾曲線
當(dāng)前點(diǎn)為起點(diǎn)茵乱,xy為終點(diǎn),起點(diǎn)和x1y1控制曲線起始的斜率孟岛,終點(diǎn)和x2y2控制結(jié)束的斜率瓶竭。

S = smooth curveto

Sx2,y2 x,y 簡(jiǎn)化的貝塞爾曲線
1.如果S命令跟在一個(gè)C命令或者另一個(gè)S命令的后面,它的第一個(gè)控制點(diǎn)渠羞,就會(huì)被假設(shè)成前一個(gè)控制點(diǎn)的對(duì)稱(chēng)點(diǎn)斤贰。
2.如果S命令單獨(dú)使用,前面沒(méi)有C命令或者另一個(gè)S命令次询,那么它的兩個(gè)控制點(diǎn)就會(huì)被假設(shè)為同一個(gè)點(diǎn)荧恍。

Q = quadratic Bézier curve

Qx1,y1 x,y 二次貝塞爾曲線Q
只需要一個(gè)控制點(diǎn),用來(lái)確定起點(diǎn)和終點(diǎn)的曲線斜率屯吊。因此它需要兩組參數(shù)送巡,控制點(diǎn)和終點(diǎn)坐標(biāo)。

T = smooth quadratic Bézier curveto

Tx,y Q命令的簡(jiǎn)寫(xiě)命令盒卸。
與S命令相似骗爆,T也會(huì)通過(guò)前一個(gè)控制點(diǎn),推斷出一個(gè)新的控制點(diǎn)蔽介。
1.T命令前面必須是一個(gè)Q命令摘投,或者是另一個(gè)T命令
2.如果T單獨(dú)使用,那么控制點(diǎn)就會(huì)被認(rèn)為和終點(diǎn)是同一個(gè)點(diǎn)虹蓄,所以畫(huà)出來(lái)的將是一條直線

A = elliptical Arc

A rx,ry x-axis-rotation large-arc-flag sweep-flag x,y
rx 弧的半長(zhǎng)軸長(zhǎng)度
ry 弧的半短軸長(zhǎng)度
x-axis-rotation 是此段弧所在的x軸與水平方向的夾角谷朝,即x軸的逆時(shí)針旋轉(zhuǎn)角度,負(fù)數(shù)代表順時(shí)針旋轉(zhuǎn)角度武花。
large-arc-flag 為1表示大角度弧線圆凰,0表示小角度弧線
sweep-flag 為1表示從起點(diǎn)到終點(diǎn)弧線繞中心順時(shí)針?lè)较颍?表示逆時(shí)針?lè)较颉?br> xy 是終點(diǎn)坐標(biāo)。

Z = closepath

從當(dāng)前位置到起點(diǎn)畫(huà)一條直線閉合体箕。


先看 三次貝塞爾曲線 C / c

運(yùn)用 svg path 畫(huà)的區(qū)域 主要看點(diǎn)是 弧線

直接上代碼

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewPort="0 0 500 500" version="1.1">
    <path d="M20,20 h200 c150,0 150,200 0,200 h-200 Z"/>
    <path d="M220,20 C370,20 370,220 220,220 Z" stroke="red" stroke-width="2" fill="bule"/>
</svg>

主要代碼

C370,20 370,220 220,220
或
c150,0 150,200 0,200

主要原理看



貝塞爾曲線-三次方公式

下面來(lái)個(gè)svg做的logo成品

nran_logo 主要實(shí)現(xiàn)點(diǎn)是 字母 R

代碼如下

<div id="nran_div" style="width: 188px;height: 50px;display: inline-block;fill: red;zoom:2;">
    <svg id="nran_logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewPort="0 0 188 50" version="1.1">
        <path id="nran_N" d="M0,0 v50 h10 v-35 l19,35 h13 v-50 h-10 v35 l-19,-35 Z"/>
        <g id="nran_I">
        <rect id='nran_I_1' x="52" y="0" width="10" height="10"/>
        <rect id='nran_I_2' x="52" y="15" width="10" height="35"/>
        </g>
        <g id="nran_R">
            <path d="M67,0 v10 h10 c8 0,8 12,0 12 h-20 v10 h15 q10,0 10,18 l12,0 q-2,-22 -8,-22 c11 0,11 -28,-6 -28 Z"/>
        </g>
        <g id="nran_A">
            <path id="nran_A_1" d="M120,0 h-6 l-15,50 h12 l9,-37 l9,37 h12 l-15,-50 Z"/>
            <use xlink:href="#nran_I_1" x="68" y="40"/>
        </g>
        <use xlink:href="#nran_N" x="146"/>
    </svg>
</div>

也可以轉(zhuǎn)換成base64圖片格式

<div id="nran_img" style="width: 188px;height: 50px;display: inline-block;fill: red;zoom:1;">
    <img style="width: 100%;height: 100%;" src="data:image/svg+xml;base64,PHN2ZyBpZD0ibnJhbl9sb2dvIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3UG9ydD0iMCAwIDE4OCA1MCIgdmVyc2lvbj0iMS4xIj4KIAk8cGF0aCBpZD0ibnJhbl9OIiBkPSJNMCwwIGwwLDUwIGwxMCwwIGwwLC0zNSBsMTksMzUgbDEzLDAgbDAsLTUwIGwtMTAsMCBsMCwzNSBsLTE5LC0zNSBaIi8+CiAJPGcgaWQ9Im5yYW5fSSI+CiAgIAk8cmVjdCBpZD0nbnJhbl9JXzEnIHg9IjUyIiB5PSIwIiB3aWR0aD0iMTAiIGhlaWdodD0iMTAiLz4KICAgCTxyZWN0IGlkPSducmFuX0lfMicgeD0iNTIiIHk9IjE1IiB3aWR0aD0iMTAiIGhlaWdodD0iMzUiLz4KIAk8L2c+CiAJPGcgaWQ9Im5yYW5fUiI+CiAJCTxwYXRoIGQ9Ik02NywwIGwwLDEwIGwxMCwwIGM4IDAsOCAxMiwwIDEyIGwtMjAsMCBsMCwxMCBsMTUsMCBxMTAsMCAxMCwxOCBsMTIsMCBxLTIsLTIyIC04LC0yMiBjMTEgMCwxMSAtMjgsLTYgLTI4IFoiLz4KIAk8L2c+CiAJPGcgaWQ9Im5yYW5fQSI+CiAJCTxwYXRoIGlkPSJucmFuX0FfMSIgZD0iTTEyMCwwIGwtNiwwIGwtMTUsNTAgbDEyLDAgbDksLTM3IGw5LDM3IGwxMiwwIGwtMTUsLTUwIFoiLz4KCQk8dXNlIHhsaW5rOmhyZWY9IiNucmFuX0lfMSIgeD0iNjgiIHk9IjQwIi8+CiAJPC9nPgoJPHVzZSB4bGluazpocmVmPSIjbnJhbl9OIiB4PSIxNDYiLz4KPC9zdmc+" alt=""/>
</div>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末专钉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子累铅,更是在濱河造成了極大的恐慌跃须,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娃兽,死亡現(xiàn)場(chǎng)離奇詭異菇民,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)第练,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阔馋,“玉大人,你說(shuō)我怎么就攤上這事娇掏∨磺蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,812評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵婴梧,是天一觀的道長(zhǎng)下梢。 經(jīng)常有香客問(wèn)我,道長(zhǎng)塞蹭,這世上最難降的妖魔是什么孽江? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,607評(píng)論 1 284
  • 正文 為了忘掉前任档玻,我火速辦了婚禮爱态,結(jié)果婚禮上鸟缕,老公的妹妹穿的比我還像新娘目代。我一直安慰自己,他們只是感情好尿褪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,728評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般洼冻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隅很,一...
    開(kāi)封第一講書(shū)人閱讀 49,919評(píng)論 1 290
  • 那天撞牢,我揣著相機(jī)與錄音,去河邊找鬼叔营。 笑死屋彪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绒尊。 我是一名探鬼主播畜挥,決...
    沈念sama閱讀 39,071評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婴谱!你這毒婦竟也來(lái)了蟹但?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,802評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谭羔,失蹤者是張志新(化名)和其女友劉穎华糖,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瘟裸,經(jīng)...
    沈念sama閱讀 44,256評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡客叉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,576評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兼搏。...
    茶點(diǎn)故事閱讀 38,712評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卵慰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出向族,到底是詐尸還是另有隱情呵燕,我是刑警寧澤,帶...
    沈念sama閱讀 34,389評(píng)論 4 332
  • 正文 年R本政府宣布件相,位于F島的核電站再扭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夜矗。R本人自食惡果不足惜泛范,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,032評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望紊撕。 院中可真熱鬧罢荡,春花似錦、人聲如沸对扶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浪南。三九已至笼才,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間络凿,已是汗流浹背骡送。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留絮记,地道東北人摔踱。 一個(gè)月前我還...
    沈念sama閱讀 46,473評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怨愤,于是被迫代替她去往敵國(guó)和親派敷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,606評(píng)論 2 350