Ich versuche, svg zu PNG-Bildern zu konvertieren phantomjs mit:PhantomJS werfen DOM Ausnahme 18 auf canvas.toDataURL mit src Bildern
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!
}
});
Aber ich bin eine DOM-Exception 18 bekommen, wenn toDataURL Aufruf. Ich habe in anderen ähnlichen Fragen gesehen, dass dies passieren kann, wenn die Svg in anderen Domänen gehostet wird usw., aber in meinem Fall stelle ich die Svg src! Was ist falsch an dem obigen Code? Warum feuert es die DOM Exception?
Ein ähnlicher Code sieht gut in jsfiddle (keine Phantomjs, in Chrom und FF getestet). Und dieses Phantom Beispiel arbeitet auch mit 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'));
});
});
});
Ich versuche, den entsprechenden Code in fabric.js zu finden, aber jede Hilfe wäre sehr geschätzt.
Ja, vergessen zu erwähnen, dass. '--web-security = false' macht in diesem Fall keinen Unterschied. – emepyc