svg之path详解及实例

首先看一下w3c的说法


对于 M L H V Z 比较容易理解,但对于 C S Q T A 并没有很详细的解析,初次见面一脸闷逼。下面借别人总结的,再来介绍一遍。可参考此文

M = moveto

Mx,y 移动到指定坐标,xy分别为x轴和y轴的坐标点,类似画笔的起点。
path中的起点,必须存在(文档中虽然没有提到过,但是path的其他命令都需要依赖一个初始位置,而实际操作过程中也没有需要到可以不使用M的情况,后面发现有例外我再过来补充。

L = lineto

Lx,y 在初始位置(M 画的起点)和xy确定的坐标画一条线。
两点一线,直线,绘图中很常见的方式。

H = horizontal lineto

Hx 沿着x轴移动一段位置

V = vertical lineto

Vy 沿着y轴移动一段位置

C = curveto

Cx1,y1 x2,y2 x,y 三次贝塞尔曲线
当前点为起点,xy为终点,起点和x1y1控制曲线起始的斜率,终点和x2y2控制结束的斜率。

S = smooth curveto

Sx2,y2 x,y 简化的贝塞尔曲线
1.如果S命令跟在一个C命令或者另一个S命令的后面,它的第一个控制点,就会被假设成前一个控制点的对称点。
2.如果S命令单独使用,前面没有C命令或者另一个S命令,那么它的两个控制点就会被假设为同一个点。

Q = quadratic Bézier curve

Qx1,y1 x,y 二次贝塞尔曲线Q
只需要一个控制点,用来确定起点和终点的曲线斜率。因此它需要两组参数,控制点和终点坐标。

T = smooth quadratic Bézier curveto

Tx,y Q命令的简写命令。
与S命令相似,T也会通过前一个控制点,推断出一个新的控制点。
1.T命令前面必须是一个Q命令,或者是另一个T命令
2.如果T单独使用,那么控制点就会被认为和终点是同一个点,所以画出来的将是一条直线

A = elliptical Arc

A rx,ry x-axis-rotation large-arc-flag sweep-flag x,y
rx 弧的半长轴长度
ry 弧的半短轴长度
x-axis-rotation 是此段弧所在的x轴与水平方向的夹角,即x轴的逆时针旋转角度,负数代表顺时针旋转角度。
large-arc-flag 为1表示大角度弧线,0表示小角度弧线
sweep-flag 为1表示从起点到终点弧线绕中心顺时针方向,0表示逆时针方向。
xy 是终点坐标。

Z = closepath

从当前位置到起点画一条直线闭合。


先看 三次贝塞尔曲线 C / c

运用 svg path 画的区域 主要看点是 弧线

直接上代码

<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

主要原理看



贝塞尔曲线-三次方公式

下面来个svg做的logo成品

nran_logo 主要实现点是 字母 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>

也可以转换成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>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342