¿Existe una buena biblioteca para convertir SVG en lienzo HTML que admita el elemento de fuente? Ya he intentado canvg, pero no es compatible con Font.Dibujar SVG en HTML5 Lienzo con soporte para el elemento de fuente
Respuesta
Los navegadores compatibles con HTML5 Canvas también son compatibles con SVG. Como tal, usted puede hacer esto:
var img = new Image;
img.onload = function(){ myCanvasContext.drawImage(img,0,0); };
img.src = "foo.svg";
La única desventaja de esta técnica es que si el SVG está fuera de su dominio de la tela se manchará; no podrá usar getImageData()
para leer el SVG resultante, si ese es su objetivo.
He puesto un ejemplo de esta técnica en mi servidor: http://phrogz.net/tmp/canvas_from_svg.html
He probado esto y comprobado que funciona (y tiene el mismo aspecto) en IE9, Chrome v11b, Safari v5 y v4 Firefox.
[Editar] Tenga en cuenta que:
Chrome y Firefox actualmente 'Punt' en la seguridad y no permitir la lectura de la tela (por ejemplothese have been fixedgetImageData()
otoDataURL()
) después de dibujar cualquier SVG el lienzo (independientemente del dominio)Firefox actualmente tiene un error RCEst e se niega a dibujar SVG en el lienzo a menos que el SVG tenga los atributos
height
ywidth
especificados.
En caso de tener el SVG embebido en páginas HTML o como fuente cruda puede utilizar una URL de datos para convertir el SVG a un elemento de imagen HTML que luego se puede dibujar en el lienzo:
var img = new Image();
// here attach an onload handler that draws the image on the canvas
// svgSource is the raw svg xml
img.src = "data:image/svg+xml," + encodeURIComponent(svgSource);
Tenga en cuenta que con el contenido SVG complejo, puede encontrarse con limitaciones de tamaño para los datos: URI: en mi caso esto significaba que no tenía otras opciones aparte de usar canvg para dibujar un complejo SVG. –
Acabo de probar una simple etiqueta img, el método de Phrogs y canvg. Mi SVG tiene un PNG incrustado. Eso solo funcionó en canvg. Los otros mostraron la imagen sin el PNG incrustado. Eso fue en Android Jellybean con el navegador estándar o Chrome.
- 1. Dibujar texto girado en un lienzo HTML5
- 2. ¿Método para convertir lienzo HTML5 a SVG?
- 3. Degradado rectangular con elemento de lienzo HTML5
- 4. Cómo dibujar polígonos en un lienzo HTML5?
- 5. Dibujar cuadrícula/tabla en lienzo HTML5
- 6. elemento de lona html5 y svg
- 7. Guardar el elemento de lienzo html5 en el archivo (local)
- 8. Cómo dibujar un sector circular en un lienzo html5?
- 9. Cómo dibujar una imagen transparente con un elemento de lienzo html5
- 10. ¿Desgarro en el lienzo HTML5?
- 11. ¿Evitará dibujar medio píxel en el lienzo HTML5 para mejorar la velocidad?
- 12. cursor: puntero en el elemento de lienzo html5 hover
- 13. html5 - elemento de lienzo - Varias capas
- 14. Cómo deshabilitar seleccionar elemento de lienzo html5
- 15. ¿Dibujar una línea con dos clics del mouse en el lienzo de HTML5?
- 16. Html5 arrastrar y soltar en el elemento svg
- 17. "Borrado" en el lienzo html5
- 18. Soporte de SVG en Android
- 19. ¿Puedo dibujar con antialiasing en lienzo?
- 20. "googlemaps" arrastrando con lienzo html5
- 21. Lienzo HTML5 - Rellene el círculo con la imagen
- 22. Curvas rotas en Html5 Lienzo Bezier
- 23. django == 1.4 soporte para html5
- 24. Redibujar el lienzo de HTML5 increíblemente lento
- 25. dibujar una forma transparente en el lienzo
- 26. Similitudes entre el lienzo HTML5 y el lienzo de Android
- 27. ¿Cómo dibujar texto en lienzo?
- 28. Mejor IDE para HTML5, Javascript, CSS, soporte de Jquery con GUI herramientas de construcción
- 29. Dibujar rectángulos dinámicamente en SVG
- 30. Dibujar texto sobre lienzo en el ángulo
Esto no funciona en firefox – Nilesh
@Nilesh ¿Qué sistema operativo y versión de FireFox? Funciona para mí usando FF4.0 en Windows 7. – Phrogz
Tengo un svg como una cadena en javascript. Lo uso como 'img.src =" datos: image/svg + xml, "+ svgString;' Funciona en chrome, pero firefox se niega a analizar la variable 'svgString', ya que he incrustado estilo con CDATA. Actualización: resuelto con encodeURIComponent (svgString) – arunkjn