Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 您可以使用canvas而不使用SVG做什么?_Html_Svg_Graphics_Html5 Canvas - Fatal编程技术网

Html 您可以使用canvas而不使用SVG做什么?

Html 您可以使用canvas而不使用SVG做什么?,html,svg,graphics,html5-canvas,Html,Svg,Graphics,Html5 Canvas,我正在进行一个项目,我需要在SVG和画布之间进行选择。我发现SVG在大多数方面都是最好的 有什么东西是SVG做不到的,但Canvas可以做的吗?Canvas是一个元素 SVG是 我觉得这两者之间的区别超出了StackOverflow对dicuss的讨论范围,因为它与计算机艺术基础有关,而不是编程,而且如果不是在搜索引擎中,那么在维基百科中有很多可用的信息。例如,可以将基于像素的媒体用于像素游戏。画布是一个元素 SVG是 我觉得这两者之间的区别超出了StackOverflow对dicuss的讨论范

我正在进行一个项目,我需要在SVG和画布之间进行选择。我发现SVG在大多数方面都是最好的

有什么东西是SVG做不到的,但Canvas可以做的吗?

Canvas是一个元素

SVG是

我觉得这两者之间的区别超出了StackOverflow对dicuss的讨论范围,因为它与计算机艺术基础有关,而不是编程,而且如果不是在搜索引擎中,那么在维基百科中有很多可用的信息。例如,可以将基于像素的媒体用于像素游戏。

画布是一个元素

SVG是


我觉得这两者之间的区别超出了StackOverflow对dicuss的讨论范围,因为它与计算机艺术基础有关,而不是编程,而且如果不是在搜索引擎中,那么在维基百科中有很多可用的信息。例如,可以使用基于像素的媒体进行像素游戏。

首先,

如果您已经在SVG学习曲线上投入了时间,那么您可以在没有画布的情况下完成项目,因为这两个元素做的事情非常相似。Canvas具有相当大且陡峭的学习曲线,您可能希望避免“中期项目”

与流行观点相反……Canvas和SVG都使用矢量绘图命令

它们使用矢量命令在其绘图曲面上绘制直线和曲线。画布和SVG都将这些图形作为像素渲染到它们的元素表面上

和…

画布和SVG都可以转换(偏移、旋转和缩放)其图形。画布和SVG都可以将样式应用于其图形(填充颜色、笔划颜色、不透明度等)

但是…

SVG更进一步,“记住”所有绘图命令。这意味着SVG即使在缩放时也可以重新发出这些绘图命令。因此,SVG非常适合那些必须缩放而不会变得“锯齿状”的图形。您甚至可以使用CSS重新设置图形样式(更改颜色、不透明度、位置、旋转等)。这通常非常有用。例如,您可以使用CSS使SVG leopard更改其斑点的颜色

画布只是“画和忘”——它不记得画什么或画在哪里。因此,它是一种更轻的元素。你说:“但是canvas做的所有游戏都有移动玩家”。对于画布,编程实践是擦除画布并在其新位置重新绘制任何形状。这就产生了一种错觉,即形状被命令移动(它们不是这样)。Canvas在重画时速度非常快,可以以每秒60帧的速度轻松重画稍微复杂的游戏场景。这种速度是有代价的。必须“记住”场景元素的位置,以便以后可以在其新位置和新样式中重新渲染它们。(没有简单的CSS功能让画布豹改变斑点)

SVG图形附带了已经内置的传统鼠标事件。Canvas只在整个画布上触发传统的鼠标事件,而不在单个图形上触发(因为Canvas忘记了它所绘制的形状)。因此,如果要获取与单个画布形状相关的鼠标事件,必须(1)记住绘制形状的位置(2)在整个画布上侦听鼠标事件,(3)检查鼠标是否位于任何形状内(这在数学上很容易实现),然后为发现的形状处理鼠标事件。画布元素需要更多的代码来实现

IMHO,canvas闪耀的一个特定用例:

除了这些功能差异之外,Canvas还允许您检查和更改画布表面上的任何像素。特别是,这些有价值的像素信息让您可以对图像执行一些出色的任务:

  • 在像素级重新着色图像的任何部分(如果您使用HSL,您甚至可以在保留重要照明和饱和度的同时重新着色图像,以使结果看起来不像有人在图像上刷油漆)
  • “剔除”图像中人物/项目周围的背景
  • 检测并泛光填充图像的一部分(例如,将用户单击的花瓣的颜色从绿色更改为黄色——仅此而已!)
  • 进行透视扭曲(例如,将图像缠绕在杯子的曲线上)
  • 检查图像内容(如面部识别)
  • 回答有关图像的问题:在我的停车位图像中是否停放了一辆车
  • 应用标准图像过滤器(灰度、深褐色等)
  • 应用任何你可以想象的奇异图像过滤器(Sobel边缘检测)
  • 合并图像。如果亲爱的苏奶奶不能参加家庭聚会,就把她“photoshop”到聚会图像中。不喜欢菲尔表哥,只要“把他用photoshop处理掉”
  • 播放视频/从视频中抓取帧
  • 将画布内容导出为.jpg |.png图像(您甚至可以选择裁剪或注释图像,并将结果导出为新图像)
  • 还有更多的图像像素操作没有想到

首先,

如果您已经在SVG学习曲线上投入了时间,那么您可能会在没有画布的情况下完成项目,因为这两个元素做的事情非常相似。画布有一个相当大且陡峭的学习曲线,您可能希望避免“项目中期”

与流行观点相反……画布和SVG都使用矢量绘图命令!

它们使用矢量命令在图形表面上绘制直线和曲线。Canvas和SVG都将这些图形作为像素渲染到元素表面上

和…

画布和SVG都可以变换(偏移、旋转和缩放)它们的图形。画布和SVG都可以将样式应用于它们的图形(填充颜色、笔划颜色、不透明度等)

但是…

SVG更进一步,它“记住”了所有的图形