¿Existe una forma predeterminada de dibujar un archivo SVG en un lienzo HTML5? Google Chrome admite cargar el SVG como una imagen (y simplemente usarlo drawImage
), pero la consola del desarrollador sí lo advierte resource interpreted as image but transferred with MIME type image/svg+xml
.
Sé que una posibilidad sería convertir el SVG en comandos de lienzo (como en esta pregunta ), pero espero que no sea necesario. No me interesan los navegadores antiguos (por lo tanto, si FireFox 4 e IE 9 son compatibles con algo, eso es lo suficientemente bueno).
Respuestas:
EDITAR Dec 16th, 2019
Path2D es compatible con todos los principales navegadores ahora
EDITAR 5 de noviembre de 2014
Ahora puede usar
ctx.drawImage
para dibujar HTMLImageElements que tienen una fuente .svg en algunos pero no en todos los navegadores . Chrome, IE11 y Safari funcionan, Firefox funciona con algunos errores (pero todas las noches los ha solucionado).Ejemplo en vivo aquí . Deberías ver un cuadrado verde en el lienzo. El segundo cuadrado verde en la página es el mismo
<svg>
elemento insertado en el DOM para referencia.También puede usar los nuevos objetos Path2D para dibujar rutas SVG (cadena). En otras palabras, puedes escribir:
Ejemplo en vivo de eso aquí.
Antigua respuesta de posteridad:
No hay nada nativo que le permita utilizar de forma nativa las rutas SVG en el lienzo. Debes convertirte o usar una biblioteca para hacerlo por ti.
Sugeriría buscar en canvg:
http://code.google.com/p/canvg/
http://canvg.googlecode.com/svn/trunk/examples/index.htm
fuente
drawImage
. Pero todavía recibo esa advertencia. ¿De dónde viene?Lo siento, no tengo suficiente reputación para comentar sobre la respuesta de @Matyas, pero si la imagen del svg también está en base64, se dibujará en la salida.
Manifestación:
fuente
img
etiquetas en elsvg
, y luego dibujar imágenes en el lienzo por separado después.Puede dibujar fácilmente
svg
s simples en un lienzo:Nota: El único inconveniente del método es que no puede dibujar imágenes incrustadas en el
svg
. (ver demo)Demostración:
(Tenga en cuenta que la imagen incrustada solo es visible en el
svg
)fuente
Mozilla tiene una forma simple de dibujar SVG en el lienzo llamada " Dibujar objetos DOM en un lienzo "
fuente
Como Simon dice anteriormente, usar drawImage no debería funcionar. Pero, usando la biblioteca canvg y:
Esto viene del enlace que Simon proporciona arriba, que tiene una serie de otras sugerencias y señala que desea vincular o descargar canvg.js y rgbcolor.js. Estos le permiten manipular y cargar un SVG, ya sea a través de URL o usando código SVG en línea entre etiquetas svg, dentro de las funciones de JavaScript.
fuente