Estoy tratando de convertir un archivo SVG generado por Raphael JS (y el usuario, ya que puede arrastrar y rotar las imágenes). Seguí este Convert SVG to image (JPEG, PNG, etc.) in the browser pero todavía no puedo conseguirlo.Problema al guardar como png un SVG generado por Raphael JS en un lienzo
Debe ser fácil, pero no puedo poner mi dedo en lo que me sale mal.
Tengo mi svg en un div con #ec
como id
y el del lienzo es #canvas
.
function saveDaPicture(){
var img = document.getElementById('canvas').toDataURL("image/png");
$('body').append('<img src="'+img+'"/>');
}
$('#save').click(function(){
var svg = $('#ec').html();
alert(svg);
canvg('canvas', svg, {renderCallback: saveDaPicture(), ignoreMouse: true, ignoreAnimation: true});
});
La alerta me da:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="600" height="512">
<desc>Created with Raphael</desc>
<defs></defs>
<image x="0" y="0" width="300" height="512" preserveAspectRatio="none" href="imageurl.jpg"></image>
<rect x="168" y="275" width="52" height="70" r="0" rx="0" ry="0" fill="none" stroke="#000" stroke-dasharray="8,3" transform="rotate(21.91207728 194 310)" style="opacity: 1; display: none; " opacity="1"></rect>
<circle cx="50" cy="50" r="50" fill="none" stroke="#000"></circle>
<image x="358" y="10" width="39" height="138" preserveAspectRatio="none" href="imageurl2.png" style="cursor: move; "></image>
<image x="397" y="10" width="99" height="153" preserveAspectRatio="none" href="imageurl3.png" style="cursor: move; "></image>
<image x="184" y="286" width="10" height="10" preserveAspectRatio="none" href="imageurl4.png" style="cursor: pointer; opacity: 1; display: none; " opacity="1"></image>
<image x="204" y="286" width="10" height="10" preserveAspectRatio="none" href="imageurl5.png" style="cursor: pointer; opacity: 1; display: none; " opacity="1"></image>
<image x="170" y="277" width="48" height="66" preserveAspectRatio="none" href="imageurl6.png" style="cursor: move; opacity: 1; " r="50" opacity="1" transform="rotate(21.91207728 194 310)"></image>
</svg>
que es el xml del SVG y si creo canvg documentation, es bueno.
De todos modos, con este código, la variable img
, que debería tener los datos de imagen convertidos, obtuvo los datos de un png vacío con las dimensiones de la svg.
La única cosa que supongo es que el SVG generado por JS Rafael no está bien formateado para canvg (como, href
de image
debería ser xlink:href
si sigo the W3C recommandations)
Alguien tiene una idea sobre este problema? : D
¿El lienzo de Canvg representa la imagen correctamente? ¿Puedes vincular un ejemplo en vivo con el que podría jugar? – jbeard4
@Shikiryu ¿Encontró alguna solución? Tengo una [pregunta] similar (http://stackoverflow.com/questions/16556447/merge-images-from-raphael-svg) – vibskov