¿Cuáles son las diferencias entre SVG y HTML5 Canvas? Ambos parecen hacerme lo mismo. Básicamente, ambos dibujan ilustraciones vectoriales utilizando puntos de coordenadas.
¿Qué me estoy perdiendo? ¿Cuáles son las principales diferencias entre SVG y HTML5 Canvas? ¿Por qué debería elegir uno sobre el otro?
Respuestas:
Ver Wikipedia: http://en.wikipedia.org/wiki/Canvas_element
ACTUALIZACIÓN: uso SVG debido a sus capacidades de lenguaje de marcado: puede ser procesado por XSLT y puede contener otro marcado en sus nodos. De manera similar, puedo mantener SVG en mi marcado (química). Esto me permite manipular atributos SVG (por ejemplo, renderizado) mediante combinaciones de marcado. Esto puede ser posible en Canvas, pero sospecho que es mucho más difícil.
fuente
SVG es como un programa de "dibujo". El dibujo se especifica como instrucciones de dibujo para cada forma y se puede cambiar cualquier parte de cualquier forma. Los dibujos están orientados a la forma.
Canvas es como un programa de "pintura". Una vez que los píxeles llegan a la pantalla, ese es tu dibujo. No puede cambiar las formas excepto sobrescribiéndolas con otros píxeles. Las pinturas están orientadas a píxeles.
Poder cambiar dibujos es muy importante para algunos programas; por ejemplo, aplicaciones de dibujo, herramientas de diagramación, etc. Así que SVG tiene una ventaja aquí.
Poder controlar píxeles individuales es importante para algunos programas artísticos.
Obtener un excelente rendimiento de animación para la manipulación del usuario mediante arrastres del mouse es más fácil con Canvas que con SVG.
Un solo píxel en la pantalla de la computadora a menudo consumirá 4 bytes de información y una pantalla de computadora en estos días ocupa varios megabytes. Por lo tanto, Canvas puede ser un inconveniente si desea permitir que el usuario edite una imagen y luego la vuelva a cargar.
Por el contrario, dibujar un puñado de formas que cubran toda la pantalla usando SVG ocupa pocos bytes, se descarga rápidamente y se puede cargar de nuevo fácilmente con las mismas ventajas yendo en esa dirección que cuando baja en la otra dirección. Entonces SVG puede ser más rápido que Canvas.
Google implementó Google Maps con SVG. Eso le da a la aplicación web un rendimiento rápido y un desplazamiento suave.
fuente
Resumen de alto nivel de Canvas frente a SVG
Lona
SVG
Para conocer la diferencia detallada, lea http://msdn.microsoft.com/en-us/library/ie/gg193983(v=vs.85).aspx
fuente
Hay una diferencia en lo que son y en lo que hacen por ti.
Para desarrollar un poco, sobre formato versus API:
Con svg puede ver, guardar y editar el archivo en muchas herramientas diferentes. Con el lienzo, simplemente dibuja y no se retiene nada sobre lo que acaba de hacer, aparte de la imagen resultante en la pantalla. Puede animar ambos, SVG maneja el redibujado por usted con solo mirar los elementos y atributos especificados, mientras que con el lienzo debe volver a dibujar cada marco usted mismo usando la API. Puede escalar ambos, pero SVG lo hace automáticamente, mientras que con el lienzo nuevamente, debe volver a emitir los comandos de dibujo para el tamaño dado.
fuente
Dos cosas que me impresionaron más de SVG y Canvas fueron:
Posibilidad de usar Canvas sin DOM, donde SVG depende en gran medida de DOM y a medida que aumenta la complejidad, el rendimiento se ralentiza. Como en el diseño de juegos.
La ventaja de usar SVG sería que la resolución sigue siendo la misma en todas las plataformas que carece de Canvas.
En este sitio se proporcionan muchos más detalles. http://dev.opera.com/articles/view/svg-or-canvas-choosing-between-the-two/
fuente
Depende absolutamente de su necesidad / requisito.
Si solo desea mostrar una imagen / gráfico en una pantalla, el enfoque recomendado es lienzo. (El ejemplo es PNG, GIF, BMP, etc.)
Si desea ampliar las características de sus gráficos, por ejemplo, si pasa el mouse sobre el gráfico y desea hacer zoom en cierta área sin estropear la calidad de visualización, seleccione SVG. (Un buen ejemplo son los archivos AutoCAD, Visio, GIS).
Si desea crear una herramienta de creación de diagrama de flujo dinámico con conector de forma, es mejor seleccionar SVG en lugar de CANVAS.
Cuando aumenta el tamaño de la pantalla, el lienzo comienza a degradarse a medida que es necesario dibujar más píxeles.
Cuando la cantidad de objetos aumenta en la pantalla, SVG comienza a
degradarse ya que los agregamos continuamente al DOM.
También consulte: http://msdn.microsoft.com/en-us/library/gg193983(v=vs.85).aspx
fuente
SVG
Basado en el caso de uso, SVG se usa para logotipos, gráficos porque sus gráficos vectoriales se dibujan y se olvidan. Cuando el puerto de visualización cambia, como cambiar el tamaño (o hacer zoom), se ajustará solo y no será necesario volver a dibujarlo.
Lona
El lienzo es un mapa de bits (o ráster) que se realiza pintando píxeles en la pantalla. Se utiliza para desarrollar juegos o experiencia gráfica ( https://www.chromeexperiments.com/webgl ) en un área determinada, pinta píxel y cambia redibujándolo en otro. Dado que es un tipo de ráster, necesitamos volver a dibujar por completo a medida que cambia el puerto de visualización.
Referencia
http://www.sitepoint.com/7-reasons-to-consider-svgs-instead-of-canvas
http://en.wikipedia.org/wiki/WebGL
http://vector-conversions.com/vectorizing/raster_vs_vector.html
fuente
SVG
es una especificación de un dibujo como un formato de archivo. Un SVG es un documento. Puede intercambiar archivos SVG como archivos HTML. Y además, debido a que los elementos SVG y los elementos HTML comparten la misma API DOM, es posible usar JavaScript para generar un DOM SVG de la misma manera que es posible crear un DOM HTML. Pero no necesita JavaScript para generar archivos SVG. Un simple editor de texto es suficiente para escribir un SVG. Pero necesitas al menos una calculadora para calcular las coordenadas de las formas en el dibujo.CANVAS
es solo un área de dibujo. Es necesario utilizar JavaScript para generar el contenido de un lienzo. No se puede intercambiar un lienzo. No es ningún documento. Y los elementos del lienzo no forman parte del árbol DOM. No puede utilizar la API DOM para manipular el contenido de un lienzo. En su lugar, debe utilizar una API de lienzo dedicada para dibujar formas en el lienzo.La ventaja de a
SVG
es que puede intercambiar el dibujo como un documento. La ventajaCANVAS
es que tiene una API de JavaScript menos detallada para generar los contenidos.Aquí hay un ejemplo, que muestra que puede lograr resultados similares, pero la forma de hacerlo en JavaScript es muy diferente.
Como puede ver, el resultado es casi el mismo, pero el código JavaScript es completamente diferente.
SVG se crea con la API DOM utilizando
createElement
,setAttribute
yappendChild
. Todos los gráficos están en las cadenas de atributos. SVG tiene primitivas más poderosas. El CANVAS, por ejemplo, no tiene nada equivalente a la trayectoria del arco SVG. El ejemplo CANVAS intenta emular el arco SVG con una curva Bezier. En SVG puedes reutilizar elementos para transformarlos. En el CANVAS no se pueden reutilizar elementos. En su lugar, debe escribir una función de JavaScript para llamarla dos veces. SVG tiene unviewBox
que permite usar coordenadas normalizadas, lo que simplifica las rotaciones. En el lienzo tiene que calcular las coordenadas sí mismos basado de laclientWidth
eclientHeight
. Y puede diseñar todos los elementos SVG con CSS. En CANVAS no puedes diseñar nada con CSS. Dado que SVG es un DOM, puede asignar controladores de eventos a todos los elementos SVG. Los elementos de CANVAS no tienen DOM ni controladores de eventos DOM.Pero, por otro lado, el código CANVAS es mucho más fácil de leer. No necesita preocuparse por los espacios de nombres XML. Y puede llamar directamente a las funciones gráficas, porque no necesita construir un DOM.
La lección es clara: si desea dibujar rápidamente algunos gráficos, use CANVAS. Si necesita compartir los gráficos, le gusta darle estilo con CSS o desea usar controladores de eventos DOM en sus gráficos, cree un SVG.
fuente
agregando a los puntos anteriores:
SVG es liviano para transferir a través de la web en comparación con JPEG, GIF, etc. y también escala extremadamente cuando se cambia de tamaño sin perder la calidad.
fuente
SVG
Está basado en modelos de objetos.
Es adecuado para utilizar grandes áreas de renderizado.
SVG proporciona soporte para controladores de eventos.
Se permite la modificación mediante script y CSS.
SVG tiene mejor escalabilidad
SVG está basado en vectores (compuesto de formas).
SVG no es adecuado para gráficos de juegos. SVG no depende de la resolución.
SVG es capaz de realizar animaciones API.
SVG es adecuado para imprimir con alta calidad y cualquier resolución.
Elementos de lienzo
Está basado en píxeles.
Es adecuado para usar renderizado pequeño
Canvas no proporciona ningún recurso para los controladores de eventos.
La modificación solo se permite a través de un script.
Canvas tiene escasa escalabilidad.
Canvas está basado en ráster (compuesto por un píxel).
Canvas es adecuado para gráficos de juegos.
Canvas depende completamente de la resolución.
Canvas no tiene ninguna API para la animación.
El lienzo no es adecuado para imprimir en alta calidad y alta resolución.
fuente