1.什么是SVG?
描述:
- 一种使用XML描述的2D图形的语言
- SVG基于XML意味着,SVG DOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。
- 在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
2.什么是canvas?
描述:
- 通过Javascript来绘制2D图形。
- 是逐像素进行渲染的。
- 其位置发生改变,会重新进行绘制。
3.什么是WebGL 3D?
- 说白了就是基于Canvas的3D框架
- 主要用来做 3D 展示、动画、游戏。
因为前两项都是描述2D图形的,而WebGL是描述3d的,所以以下针对SVG和Canvas做比较。
3.有了Canvas为什么还要使用SVG
最重要的一点是SVG不依赖于终端设备的像素,可以随意放大缩小但是不会失真
继续:为什么SVG放大不会失真而Canvas却会变模糊呢?
因为SVG的渲染的原理是通过对图形的数学描述来绘图的,例如:以下哆啦A梦的头型的思路是,我先画一个贝塞尔函数,然后填充颜色。
而Canvas的渲染原理是通过对每个像素颜色的填充,最后组成图形,例如:以下马里奥的帽子我们可以看出,其实帽子的形状是由一个个像素填充出来的。
另外Canvas渲染出来的图叫位图,SVG渲染出来的图叫矢量图
看到这里你肯定会觉得那直接所有图形都用SVG画不就行了,位图就可以直接淘汰了呀,但是SVG画的图也有缺点,以下针对两者的不同做一个对比。
4.两者的对比
理解适用场景:
从以下这张微软开发社区公布的性能图中也可以看出,SVG在绘图面积较大,数据量较小的时候性能较好,渲染时间较短,而Canvas刚好相反。
5.总结
Canvas和SVG两者的适用场景不同,开发者在使用是应根据具体的项目需求来选择相应的渲染方式。
最后附上一个SVG编译器帮大家更好的理解和使用SVG,可以直接复制代码编译运行
SVG 编辑器
创建
Rect Circle Ellipse Line
形状
请先创建图形
外观和变换
填充
描边
translateX translateY rotate scale