Canvas 和 SVG 的区别

353 阅读2分钟

想要分清楚两者的区别,首先我们要知道他们具体是什么。Canvas 是 HTML5 提供的新元素,而 SVG 并不属于 html,在 html 5 中,很多人会觉得 canvas 与 svg 差不多,也不知道要怎么去用,那么,就一起来看看吧。

Canvas

主要是用笔刷来绘制 2D 图形的。

  • Canvas 是通过 JS 来绘制的。
  • Canvas 图像单位是像素,是逐像素进行渲染的。
  • 绘制完毕之后,浏览器将不再关注它。
  • 如果位置发生变换,就需要重新绘制,整个场景都将重绘,包括任何或许已被图形覆盖的对象。

SVG

主要是用标签来绘制不规则矢量图的。

  • SVG 使用 XML 描述的2D图像。
  • SVG 基于 XML,这意味着 SVG DOM 中的每个元素都是可用的。可以为某个元素附加 JS 事件处理器。
  • SVG 绘制的图像是一个对象,如果对象的属性发生改变,浏览器将重绘。

相同点

都是主要用来画 2D 图形的。

不同点

  • Canvas 画的是位图,SVG 画的是矢量图。
  • SVG 节点过多时渲染慢,Canvas 性能更好一点,但写起来更复杂。
  • SVG 支持分层和事件,Canvas 不支持,但是可以用库实现。
  1. SVG 是一种矢量图,而 Canvas 依赖于分辨率。所以 SVG 放大不会失真(很适合做地图),但是 Canvas 会。
  2. SVG 支持事件处理器,而 Canvas 不支持事件处理器。
  3. SVG 中的文字独立于图像,文字可保留,可编辑和可搜索,Canvas 的文本渲染能力弱。
  4. Canvas 适合图像密集型的游戏,频繁地重绘图像,SVG 绘制的复杂度高时减慢渲染的速度。
  5. Canvas 绘制的图形可以多种格式 (jpg、png) 保存图片,但是 SVG 绘制的只能以 .SVG 格式保存,使用时可以引入 html 文件。
  6. Canvas 渲染性能高,适合开发游戏,除此之外,还有统计中常见的柱状图、饼图、雷达图等也使用的 Canvas 。SVG 不适合游戏应用。
  7. Canvas只能给整个画布添加事件,而不能给某个图形或文件添加事件处理器,但是 SVG 支持事件绑定,如果需要添加带有事件的动画效果时,就需要选择 SVG。