什么是SVG?

  Δ  SVG 指可伸缩矢量图形 (Scalable Vector Graphics)

  Δ  SVG 用来定义用于网络的基于矢量的图形

  Δ  SVG使用XML格式来定义图形

  Δ  SVG 是万维网联盟的标准

  Δ  SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体


SVG的优势在于?

  ΔSVG 可被非常多的工具读取和修改(比如记事本)

  ΔSVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。

  ΔSVG 是可伸缩的

  ΔSVG 图像可在任何的分辨率下被高质量地打印  

  ΔSVG 可在图像质量不下降的情况下被放大,修改

  ΔSVG 图像中的文本是可选的,同时也是可搜索的。很适合制作地图!!

  Δ SVG 可以与 Java 技术一起运行

  Δ SVG 是开放的标准

  Δ SVG 是纯粹的XML文本


与flash相比?

  •   SVG 最大的优势是与其他标准(比如 XSL 和 DOM)相兼容。而 Flash 则是未开源的私有技术。

与canvas相比?

  canvas更加原始,是基于像素处理图像 ,而SVG是基于矢量处理图像!

  

  ↑就像画一条直线↑

  Δ  canvas中会记录这条直线的第一个像素到最后一个像素的位置和颜色,它们的排列和数量无法改变;

      SVG中则会记录这条直线的起始位和终点坐标和直线的颜色,更加便于修改!

  Δ  因为canvas是记录型的,所以当你想要缩放图片或对图像进行修改时 ,图片可能会丢失像素,也就是失真。   典型例子:表情包-_-

    SVG就像乐谱,记录的是音律、节奏,不会丢失数据,所以呈现的是高保真的图像!


编辑SVG

  Δ可直接嵌入HTML文件中

  Δ可使用以下标签引入文件

    <embed>|<object>|<iframe>

  Δ<a>标签链接到svg外部文件


  一些基础的图形实现 ↓

SVG <rect>

<rect>标签可创建矩形及其变种。

举个栗子~

 <svg xmlns="http://www.w3.org/2000/svg" version="1.1">  //位于"http://www.w3.org/2000/svg"的命名空间
2   <rect width="300" height="100"
  style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)"/>
</svg>

SVG <circle>

 <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red"/>
</svg>

SVG<ellipse>

 <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<ellipse cx="300" cy="80" rx="100" ry="50" //rx定义椭圆水平半径,ry定义椭圆垂直半径
style="fill:yellow;stroke:purple;stroke-width:2"/>
</svg>

SVG<line>

  创建一条直线,属性值有x1,x2,定义x轴上的起始和结束,y1,y2,定义y轴上的起始和结束;


SVG<polygon>

  Δ  有一个points属性定义多边形的每个顶点的坐标;

  Δ  有一个fill-rule属性判断一个点是否在图形内,属性值有nonzero|evenodd;


SVG<polyline>

  Δ  创建任何只有直线的形状;

  Δ  有一个points属性,是各个顶点的集合;


SVG<path>

  • M = moveto
  • L = lineto
  • H = horizontal lineto
  • V = vertical lineto
  • C = curveto
  • S = smooth curveto
  • Q = quadratic Bézier curve
  • T = smooth quadratic Bézier curveto
  • A = elliptical Arc
  • Z = closepath

  大写表示绝对定位,小写表示相对定位。

  绘制一个三角形↓

 <svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg"><path d='M350 100 L370 300 L330 300 Z'/></svg>

SVG <text>

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<text x="0" y="15" fill="red">I love SVG</text>
</svg>

SVG stroke 属性

  • stroke                  //设置一条直线,文本或描边的颜色
  • stroke-width         //设置一条直线,文本或描边的厚度
  • stroke-linecap        //使直线呈现圆角样式
  • stroke-dasharray    //创建虚线

     查看与stroke-dasharray属性相关的实用的效果

  • stroke-linejoin       //描边的转角样式


SVG 模糊效果与滤镜

  所有的滤镜都包含在<defs>元素中,<filter>是向图形应用滤镜的元素

  <feGaussianBlur>元素用于创建模糊效果

  例如:创建一个带有模糊效果的正方形,可以这样写↓

<svg height="110" width="110">
<defs>
<filter id="f1" x="0" y="0">
<feGaussianBlur in="SourceGraphic" stdDeviation="15" /> //in属性设置渲染效果的范围
                                   //stdDeviation属性设置图像的模糊程度
</filter>
</defs>
<rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" /> //filter属性告诉我们要应用哪个滤镜
</svg>

  SVG还包括很多其他效果,这里只介绍到这,大多数看文档就知道了,重点还是要在实践中去摸索其中的技巧。

  看svg你会觉得很简单,但是真正做的时候会出现很多让人不解的结果,why?重点其实在下文↓

  svg似乎与html很像,但是当你刚开始使用Javascript去操作这些元素时会发现那些细微的区别让人很头疼。比如......

1.获取SVGDocument

  当使用javascript操作html文档时,首要的可能就是获取document对象,如果svg代码直接嵌入在html中,它们共用同一个documen对象,此时对他们俩来说没有什么区别。

但是更多时候,你可能是在html文档中用<iframe><object>这种标签来引入svg文件。这种情况下,元素的src属性指向的文件有自己独立的document对象,用操作html元素的方法操作svg的元素已经不再适用。这时可以使用getSVGDocument()操作svg文件中的元素并且修改属性!

2.操作SVG的元素

  SVG的标签结构相较于HTML更加严格,有开始标签就要有结束标签;

  用JS创建SVG的标签时,要使用createElementNS方法来实现,并且它的第一参数必须是SVG的命名空间。就像这样↓

 <svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1" width="20" height="20">
<script type="text/javascript">
var c = document.createElementNS('http://www.w3.org/2000/svg','circle');
c.setAttribute('cx', 10);
c.setAttribute('cy', 10);
c.r.baseVal.value = 7;
c.setAttribute('fill', 'green'); document.rootElement.appendChild(c);
</script>
</svg>

  使用a标签也要在href属性中加入命名空间!

  此外,不同于HTML元素对象可以直接对一些属性赋值,SVG元素对象都需要通过调用setAttribution()方法来设定属性值此外,不同于HTML元素对象可以直接对一些属性赋值,SVG元素对象都需要通过调用setAttribution()方法来设定属性值,这不是唯一方法,但却是更好的方法!

3.坐标变换

  在svg中使用use标签对某种样式属性直接复用,例如效果中经常使用的transform属性,你可以在需要的时候直接使用!

其他的自己摸索吧~

学习SVG 重点汇总的更多相关文章

  1. ref:一系列用于Fuzzing学习的资源汇总

    ref:http://www.freebuf.com/articles/rookie/169413.html 一系列用于Fuzzing学习的资源汇总 secist2018-04-30共185833人围 ...

  2. [转载]机器学习&深度学习经典资料汇总,全到让人震惊

    自学成才秘籍!机器学习&深度学习经典资料汇总 转自:中国大数据: http://www.thebigdata.cn/JiShuBoKe/13299.html [日期:2015-01-27] 来 ...

  3. 【SVG】为了前端页面的美丽,我选择学习SVG

    [SVG]为了前端页面的美丽,我选择学习SVG 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 SVG在之前自学的过程中, ...

  4. VC++/MFC(VC6)开发技术精品学习资料下载汇总

    工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...

  5. Dynamic CRM 2013学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2013学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址: Dynamic CRM 2013学习笔记 系列汇总 ...

  6. Dynamic CRM 2015学习笔记 系列汇总

    这里列出所有 Dynamic CRM 2015学习笔记 系列文章,方便大家查阅.有任何建议.意见.需要,欢迎大家提交评论一起讨论. 本文原文地址:Dynamic CRM 2015学习笔记 系列汇总 一 ...

  7. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  8. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  9. 从0开始学习 GitHub 系列汇总笔记

    本文学习自Stromzhang, 原文地址请移步:从0开始学习 GitHub 系列汇总 我的笔记: 0x00  从0开始学习GitHub 系列之[初识GitHub] GitHub 影响力 a.全球顶级 ...

随机推荐

  1. apache: eclipse的tomcatPluginV插件下载

    Sysdeo Eclipse Tomcat Launcher plugin Plugin features Support and contributions Download Installatio ...

  2. lintcode 155 二叉树的最小深度

    二叉树的最小深度   描述 笔记 数据 评测 给定一个二叉树,找出其最小深度. 二叉树的最小深度为根节点到最近叶子节点的距离. 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? Ai ...

  3. Struts2配置文件复用代码【web.xml、struts.xml、常量配置】

    web.xml的分发器代码: <!-- 引入struts核心过滤器 --> <filter> <filter-name>struts2</filter-nam ...

  4. WebUtils复用代码【request2Bean、UUID】

    request封装到Bean对象 public static <T> T request2Bean(HttpServletRequest httpServletRequest, Class ...

  5. could not get next sequence value

    1.触发事件 在电脑A上敲项目代码,数据库原始资料是直接使用别人写好的sql导入(建表和导入表数据等): 将电脑A上数据库的资料,使用PL/SQL Developer导出项目中所用表(此时未导出Ora ...

  6. Java中数组的概念

    1.什么是二维数组?有几种表达方式?分别是什么? 答:多维数组即数组的数组,即数组的元素也是数组. 例:int[] [] a = {{1},{1,2},{1,2,3}}; 有三种方式 1).int [ ...

  7. 关于linux下的文件权限

    在ls指令加 -l 参数能看到文件权限 就像这样: drwxrwxr-x 2 asml users 4096 Jul 24 02:45 desktop 第一个d表示这是个目录,若为"-&qu ...

  8. webView 不能复制解决方案

    开发中遇到部分机型--主要是系统低于4.0,如果调用了WebView.setWebChromeClient的方法,则没办法长按复制文字 查了一下是系统的一个bug  https://bugzilla. ...

  9. Spring连接池的常用配置

    1.连接池概述 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个 应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正 ...

  10. 动易CMS - 添加自定义字段

    SELECT TOP 10 * FROM PE_CommonModel C INNER JOIN PE_U_xsjg U ON C.ItemID=U.ID WHERE C.Status=99 ORDE ...