SVG繪制圖形

web.jpeg

圖片的認(rèn)知

  • 分為:位圖矢量圖
  • 位圖
    • 位圖是有一個(gè)個(gè)小方塊組合的圖片,一個(gè)小方塊代表1px
    • 比如:jpg,png,gif等都是位圖
    • 優(yōu)點(diǎn):色彩逼真私爷,缺點(diǎn)是:圖片放大容易失真
  • 矢量圖
    • 矢量圖是用XML格式定義, 通過(guò)各種「路徑」和「填充顏色」來(lái)描述渲染的的圖片
    • 優(yōu)點(diǎn):放大不失真,缺點(diǎn):繪制起來(lái)比較復(fù)雜

SVG 標(biāo)簽繪制矢量圖

  • SVG英文全稱為Scalable Vector Graphics,意思為可縮放的矢量圖
  • 默認(rèn)是有寬度(300)和高度(150)的
  • 可以通過(guò)css樣式設(shè)置寬高搜骡,也可以通過(guò)行內(nèi)樣式設(shè)置

SVG 繪制直線

  • x1/y1設(shè)置起點(diǎn)
  • x2/y2設(shè)置終點(diǎn)
<svg>
    <line x1="100" y1="100" x2="100" y2="400" stroke="#ccc"></line>
</svg>

SVG 繪制直線折線

  • polyline
  • points:設(shè)置所有的點(diǎn)
<svg>
 <polyline points="100 100 300 100 300 300" stroke="#000" fill="none"></polyline>
</svg>

SVG 繪制多邊形

  • polygon 的標(biāo)簽
<svg>
 <polygon points="100 100 300 100 300 300" stroke="red"></polygon>
</svg>

SVG 繪制矩形

  • rect
  • x/y 是秒點(diǎn)的位置
  • width/height 寬度和高度
  • fill:填充的顏色
  • stroke:描邊顏色
  • stroke-width:描邊的寬度
  • rx/ry設(shè)置圓角半徑
<svg>
  <rect x="100" y="100" width="100" height="100" fill="red" stroke="blue" stroke-width="10" rx="10"></rect>
</svg>

SVG 繪制圓和橢圓

  • 根據(jù)繪制矩形的rx/ry的修改
  • 圓形
<svg>
    <rect x="100" y="100" width="100" height="100" fill="red" stroke="blue"  rx="50"></rect>
</svg>
  • circle 繪制圓
  • ellipse 繪制橢圓
<svg>
  
  
    <!--繪制圓-->
    <circle cx="100" cy="100" r="50"></circle>

    <!--繪制橢圓-->
    <ellipse cx="200" cy="200" rx="100"  ry="50"></ellipse>


</svg>

SVG中一些常用的屬性
fill: 修改填充顏色
fill-opacity: 0~1 設(shè)置填充顏色的透明度
stroke: 修改描邊顏色
stroke-width: 修改描邊寬度
stroke-opacity: 0~1 設(shè)置描邊透明度
stroke-linecap: butt/square/round 設(shè)置線段兩端帽子
stroke-dasharray: 設(shè)置虛線
stroke-dashoffset:設(shè)置虛線偏移位
stroke-linejoin: miter/bevel/round設(shè)置折線轉(zhuǎn)角樣式

SVG繪制路徑

  • SVG的路徑
    • M = 起點(diǎn)
    • L = 其他點(diǎn)
    • H = 和上一個(gè)點(diǎn)Y相等
    • V = 和上一個(gè)點(diǎn)X相等
    • Z = 關(guān)閉當(dāng)前路徑
<svg>

    <!--繪制路徑直線-->
  <path d="M 100 100 L 200 100" stroke="red"></path>

    <!--繪制折線-->
    <path d="M 50 50 L 300 100 L 300 300" stroke="blue" fill="none"></path>

    <!-- 關(guān)閉路徑-->
    <path d="M 70 70 L 210 200 L 210 70 Z" stroke="red" fill="none"></path>

    <!---->

    <path d="M 50 250 H 200 V 70 Z" stroke="blue" fill="none"></path>

</svg>

image.png

SVG繪制圓弧

A(rx, ry, xr, laf, sf, x, y) 從當(dāng)前位置繪制弧線到指定位置

  • rx:圓弧X半徑
  • ry:圓弧Y半徑
  • xr:弧線所在的橢圓旋轉(zhuǎn)的角度
  • laf:是否選擇弧長(zhǎng)較長(zhǎng)的一段 0是較短 1是較長(zhǎng)
  • sf:是否是順時(shí)針 0是逆時(shí)針 1是順時(shí)針
  • x/y: 弧的終點(diǎn)位置
<svg width="500" height="500">

    
    <path d="M 100 100 A 100 50 0 1 0 200 150" stroke="red" fill="none"></path>

</svg>

image.png

SVG 貝塞爾曲線

Q(x1, y1, x, y) 從當(dāng)前位置繪制二階貝塞爾曲線到指定位置

  • x1,y1: 控制點(diǎn)位置
  • x,y: 終點(diǎn)位置

C = curveto

  • C(x1, y1, x2, y2, x, y) 從當(dāng)前位置繪制三階貝塞爾曲線到指定位置
  • x1, y1: 控制點(diǎn)1位置
  • x2, y2: 控制點(diǎn)2位置
  • x, y: 終點(diǎn)位置
<svg width="500" height="500">

    <!--二階貝塞爾-->
    <path d="M 100 300 Q 150 50 300 300" stroke="red" stroke-width="5" fill="none"></path>

    <!--三界貝塞爾-->

    <path d="M100 140 C 100 50 250 150 260 100" stroke="red" stroke-width="5" fill="none"></path>
</svg>
image.png

SVG繪制文字

svg是以做下角作為參考,默認(rèn)的文字的基線和指定的位置對(duì)齊

  • text標(biāo)簽
    • x/y 指定繪制文字的開始位置
    • style:文字的樣式
    • text-anchor: 指定文字水平方向?qū)R方式
    • dominant-baseline: 指定文字垂直方向?qū)R方式
    • dx/dy: 相對(duì)于前一個(gè)文字位置, 未設(shè)置位置的文字會(huì)繼承前一個(gè)文字
<svg width="500" height="500">
    <line x1="250" y1="0" x2="250" y2="500" stroke="red" ></line>
    <line x1="0" y1="250" x2="500" y2="250" stroke="red" ></line>

    <text x="250" y="250" style="font-size: 40px;" text-anchor="start" dx="10 20">掠食龍</text>
    <!--
     text-anchor: 是以位置點(diǎn) 為參考
     start:文字開始的位置在 繪制點(diǎn)
     end:文字結(jié)束的位置在 繪制點(diǎn)
     middle:文字中的位置 在繪制點(diǎn)

    -->

</svg>
image.png

SVG繪制文字路徑

  • defs定義一個(gè) 不可見(jiàn)的 模塊區(qū)域
  • textPath 標(biāo)簽是 上面的文字 會(huì)根據(jù)defs里面定義的路徑繪制
<svg width="500" height="500">
    <!--定義文本的繪制路徑-->
    <defs>
        <path id="textPath" d="M 100 100 Q 150 50 200 100" stroke="red" fill="none"></path>

    </defs>>
    <!--繪制文字-->
    <text>
        <!--文字路勁-->
        <textPath xlink:href="#textPath">這是一個(gè)繪制的文字按照路徑繪制123</textPath>
    </text>



</svg>
image.png

SVG繪制超鏈接

<svg width="500" height="500" >
    <a xlink: xlink:title="官網(wǎng)" target="_blank">
        <!--文字-->
        <text x="100" y="100">百度爺爺</text>
        <!--圖形-->
        <circle cx="200" cy="200" r="50" fill="red" ></circle>

    </a>
</svg>

SVG線性漸變

  • linearGradient 線性漸變
    • x1/y1:漸變范圍開始位置
    • x2/y2: 漸變范圍結(jié)束位置
    • 默認(rèn)情況下是按照當(dāng)前元素的百分比
      不過(guò)可以通過(guò) gradientUnits 修改
    • gradientUnits="objectBoundingBox" 默認(rèn)
    • gradientUnits="userSpaceOnUse" 使用像素
<svg width="500" height="500">

    <!--百分比漸變-->
    <linearGradient id="myline" x1="0" y1="0" x2="1" y2="1" gradientUnits="objectBoundingBox">
        <stop offset="0" stop-color="red"></stop>
        <stop offset="1" stop-color="green"></stop>
    </linearGradient>

    <!--訪問(wèn)-->
    <rect x="100" y="100" width="300" height="100" fill="url(#myline)"></rect>


    <!--像素漸變-->

    <linearGradient id="mypx" x1="200" y1="200" x2="400" y2="200" gradientUnits="userSpaceOnUse">
        <stop offset="0" stop-color="red"></stop>
        <stop offset="1" stop-color="green"></stop>
    </linearGradient>

    <!--繪制矩形-->
    <rect x="100" y="260" width="300" height="100" fill="url(#mypx)"></rect>



</svg>
image.png

SVG繪制圖片

  • xlink:href 訪問(wèn)圖片的地址
<svg>
    <image xlink:href="images/1.gif"></image>
</svg>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市戳晌,隨后出現(xiàn)的幾起案子沪停,更是在濱河造成了極大的恐慌,老刑警劉巖约计,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诀拭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡煤蚌,警方通過(guò)查閱死者的電腦和手機(jī)耕挨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門细卧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筒占,你說(shuō)我怎么就攤上這事贪庙。” “怎么了翰苫?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵止邮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奏窑,道長(zhǎng)导披,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任埃唯,我火速辦了婚禮撩匕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筑凫。我一直安慰自己滑沧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布巍实。 她就那樣靜靜地躺著滓技,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棚潦。 梳的紋絲不亂的頭發(fā)上令漂,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音丸边,去河邊找鬼叠必。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妹窖,可吹牛的內(nèi)容都是我干的纬朝。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼骄呼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼共苛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蜓萄,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤隅茎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嫉沽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辟犀,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年绸硕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堂竟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魂毁。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跃捣,靈堂內(nèi)的尸體忽然破棺而出漱牵,到底是詐尸還是另有隱情夺蛇,我是刑警寧澤疚漆,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站刁赦,受9級(jí)特大地震影響娶聘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甚脉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一丸升、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牺氨,春花似錦狡耻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郊霎,卻和暖如春沼头,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背书劝。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工进倍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人购对。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓猾昆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親骡苞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垂蜗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容