前言
Canvas和SVG都是用于绘制图形的Web技术。
什么是SVG?
SVG: SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言XML描述的2D图形的语言,SVG基于XML就意味着SVG DOM中的每个元素都是可用的,可以为某个元素附加Javascript事件处理器。在 SVG 中,每个被绘制的图形均被视为对象。如果 SVG 对象的属性发生变化,那么浏览器能够自动重现图形。
SVG的特点:
- 不依赖分辨率
- 支持事件处理器
- 最适合带有大型渲染区域的应用程序(比如谷歌地图)
- 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
- 不适合游戏应用
什么是Canvas?
Canvas: Canvas是画布,通过Javascript来绘制2D图形,是逐像素进行渲染的。其位置发生改变,就会重新进行绘制。
Canvas的特点:
- 依赖分辨率
- 不支持事件处理器
- 弱的文本渲染能力
- 能够以 .png 或 .jpg 格式保存结果图像
- 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
注:矢量图,也称为面向对象的图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。
SVG和Canvas两者的区别?
-
Canvas是基于像素的绘图技术,而SVG是基于矢量的绘图技术。Canvas绘制的图形是由像素点组成的,而SVG绘制的图形是由数学公式描述的。
-
Canvas绘制的图形是静态的,不能被编辑和修改,而SVG绘制的图形可以被编辑和修改。
-
Canvas适合绘制动态图形和游戏,因为它可以快速地重绘图形,而SVG适合绘制静态图形和数据可视化,因为它可以轻松地缩放和变换。
-
Canvas需要使用JavaScript来绘制图形,而SVG可以使用XML或JavaScript来绘制图形。
-
Canvas对于复杂的图形处理和动画效果需要更多的代码和计算,而SVG可以使用CSS和JavaScript来实现复杂的图形处理和动画效果。
所以,Canvas适合绘制动态图形和游戏,而SVG适合绘制静态图形和数据可视化。