将Raphael JS在canvas中生成的SVG另存为png的问题
我正在尝试转换由Raphael JS (和用户,因为您可以拖动和旋转图像)生成的SVG。 我在浏览器中跟踪了这个转换SVG图像(JPEG,PNG等),但仍然无法获得它。
它一定很容易,但我不能指责我错了。
我把我的svg放在一个div中, #ec
为id
,canvas的是#canvas
。
function saveDaPicture(){ var img = document.getElementById('canvas').toDataURL("image/png"); $('body').append(''); } $('#save').click(function(){ var svg = $('#ec').html(); alert(svg); canvg('canvas', svg, {renderCallback: saveDaPicture(), ignoreMouse: true, ignoreAnimation: true}); });
警报给了我:
Created with Raphael
这是svg的xml,如果我相信canvg文档 ,那就好了。
无论如何,使用此代码,变量img
(应该具有转换后的图像数据)获得具有svg维度的空png的数据。
我猜的唯一一件事就是Raphael JS生成的svg没有很好地形成canvg(比如,如果我按照W3C的推荐 , image
href
应该是xlink:href
)
有人对这个问题有所了解吗? :d
canvg
接受SVG
数据文件路径或单行字符串
但是在你的代码中,你正在传递div #ec
的html内容
canvg('canvas', svg, {renderCallback: saveDaPicture, ignoreMouse: true, ignoreAnimation: true});
jQuery的$.html()
和DOM的innerHTML
方法都按原样返回元素的HTML内容,因此很可能是多行。
canvg
将这个多行html内容解释为文件路径,
并尝试从格式错误的url中获取数据。
因此,SVG to Canvas转换过程失败,这就是您没有按预期获得图像的原因。
这是一个应该有效的更新版本,
function saveDaPicture(){ var img = document.getElementById('canvas').toDataURL("image/png"); $('body').append(''); } $('#save').click(function(){ var svg = $('#ec').html().replace(/>\s+/g, ">").replace(/\s+
svgfix.js将解决此错误。 看一下这篇博客文章Export Raphael Graphic to Image
我使用SVG – 编辑和生成SVG图像,我们所做的是在服务器上安装ImageMagic (您可能已经安装了它)。
安装完成后,您只需要在终端中执行“convert foo.svg foo.png”等命令。 如果您使用的是php,那么您可以:
shell_exec("convert image.svg image.png");
在PHP中它完成了。