我试图SVG转换为使用phantomjs png图片上canvas.toDataURL抛出异常DOM 18:phantomjs使用SRC图像
var page = require('webpage').create();
page.evaluate(function() {
var svg = '<svg class="tnt_tracks_svg" width="800" height="180" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/\
xlink"><rect width="10" height="10" fill="red"></rect></svg>';
var src = 'data:image/svg+xml;base64,' + window.btoa(unescape(encodeURIComponent(svg)));
var img = new Image();
img.src = src;
img.onload = function() {
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0);
var src = canvas.toDataURL(); // DOM Exception 18!
}
});
但调用toDataURL时,我得到一个DOM异常18。我在其他类似的问题中看到,如果svg托管在其他域等等,这可能会发生......但在我的情况下,我提供了svg src !.上面的代码有什么问题?为什么它会触发DOM异常?
在jsfiddle(没有phantomjs,在Chrome和FF中测试过)中,类似的代码看起来不错。而这种幻象例子也正在使用fabric.js:
page.includeJs("http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js", function() {
page.evaluate(function() {
var svg_text = '<svg width="600" height="400"><g><rect width="10" height="10" fill="red"></rect></g></svg>';
fabric.loadSVGFromString(svg_text, function (objects, options) {
var loadedObject = fabric.util.groupSVGElements(objects, options);
var canvas = new fabric.Canvas('canvas');
canvas.add(loadedObject);
canvas.calcOffset();
canvas.renderAll();
console.log (canvas.toDataURL('png'));
});
});
});
我试图找到fabric.js相关的代码,但任何帮助,将不胜感激。
是,忘了提及。 '--web-security = false'在这种情况下没有任何区别。 – emepyc 2014-10-17 12:18:03