为什么我们需要HTML5画布元素,而通过嵌入SVG可以实现相同的效果呢?
SVG和canvas并不是可互换的技术。SVG是一种保留模式图形,其中所有内容都从一个相当抽象的模型(即SVG文档)绘制而来。而Canvas则是一种即时模式图形,在这种模式下,没有模型,客户端(JavaScript)必须负责重绘、动画等。
SVG是一种用于矢量图形的标记语言,具有DOM。这使得在其创建后很容易修改内容。
Canvas是一个绘画表面,就像MS Paint一样没有撤消按钮。您无法更改内容,只能覆盖它。它非常高效,因为浏览器不需要处理图像的完整DOM。未来Canvas可能有可能处理3D绘图。
http://people.mozilla.com/~vladimir/xtech2006/有一个不错的比较。
使用canvas,您无需处理DOM,这导致编写代码更快,更容易。而SVG作为一种规范则相当混乱...
举个例子:我的博客引擎(Blogger)不支持SVG(它不是一个XHTML文档)。我写了一个工具,将SVG转换为画布元素:http://plindenbaum.blogspot.com/2009/11/tool-converting-svg-to-canvas_22.html
这里是如何解析简单的SVG并在画布上绘制它的解释。
http://www.ikeralbeniz.net/2010/11/03/jugando-con-html5-canvas-y-svg-i/ http://www.ikeralbeniz.net/2010/11/04/jugando-con-html5-canvas-y-svg-ii/
在接下来的帖子中,SVG解析器将完成透明和渐变的处理。
这并不是一个技术性的答案,但我认为这是正确的答案。
关键是我们不需要两者都有。是的,我知道矢量图和光栅图之间有差异,以及控制路径、对象、动画等的不同方式,但对于最终用户来说,它们都是一样的。是的,由于它存在更长时间,SVG现在略微更加强大,但是通过更多的工作,您可以使用Canvas完成相同的事情。
我相信现实情况是Canvas是对XML本身在Web开发中压倒性反对的一部分。我相信大多数Web开发人员,特别是那些在有限的时间和资源下工作的人,除了“企业”环境外,都不喜欢XML的复杂性。Canvas是首选仅做一件事情技术集合的一部分,就像HTML5比XHTML更受欢迎,JSON比XML更受欢迎,甚至YAML也比XML更受欢迎。
我认为这个想法类似于*nix哲学,即拥有许多专门的工具,可以正确高效地完成一件事情,而不是一个超级工具完成许多事情。(这也类似于许多固定齿轮自行车骑手持有的哲学,他们摒弃了非常精确和先进的变速器技术,而选择了一个直接传动齿轮的简单性。)
我相信XML是由聪明的人们想出和开发的一种非常强大和精妙的技术,旨在成为网络、编程、配置、数据存储等方面的终极瑞士军刀;但这并不意味着管理和样式化一系列复杂路径比在一个上绘制像素更容易。因此,我们就不需要担心这种嵌入的支持问题了 ;-)
以此方式,应用程序开发人员的重点是遵守标准,让客户端设计师也这样做。因此,可以避免所有人担心插件、版本、安全设置等问题...