0
どのようにしてd3 SVG要素をキャンバスに変換できますか?D3 SVGからキャンバス
私は、Web-Chromeブラウザ上でこの作業を得たが、それは、iOSのSafariで動作していない。この例を使用し
。また、この例では、IOSのサファリで動作しますが、クロムデスクトップ上 参考作品ではない:キャンバスにSVGのためhttp://bl.ocks.org/syntagmatic/1dd1acd35f77c1fc64863e42f4a405bb
機能:iOS版では、それは半分だけキャンバスを描いている
function svgToCanvas() {
// d3.select("#aloft-canvas-container").html("");
var devicePixelRatio = window.devicePixelRatio || 1;
var canvas = d3.select("#aloft-canvas-container").append("canvas")
.attr("width", (width) * devicePixelRatio)
.attr("height", (ceilingChartHeight + topMarginFactor + xAxisTopContainerHeight) * devicePixelRatio)
.style("width", width + "px")
.style("height", (ceilingChartHeight+ topMarginFactor + xAxisTopContainerHeight) + "px")
.style("position", "absolute");
var context = canvas.node().getContext("2d");
context.scale(devicePixelRatio, devicePixelRatio);
// Convert SVG to Canvas
// see: https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Drawing_DOM_objects_into_a_canvas
var DOMURL = window.URL || window.webkitURL || window;
var svgNode = d3.select("#meteo-barbs-container").node(),
serializer = new XMLSerializer();
// var svgString = '<svg xmlns="http://www.w3.org/2000/svg">' + serializer.serializeToString(svgNode) + '</svg>';
var svgString = '<svg xmlns="http://www.w3.org/2000/svg">' + domNodeToString(svgNode) + '</svg>';;
console.log(svgString);
var image = new Image();
var svgBlob = new Blob([svgString], {
type: "image/svg+xml"
});
var url = DOMURL.createObjectURL(svgBlob);
image.onload = function() {
context.drawImage(image, 0, 0);
DOMURL.revokeObjectURL(url);
d3.select("#meteo-barbs-container").remove();
}
image.src = url;
};
。 :-(
ないiOSの問題のため、しかし、クロム以外のすべてのブラウザのために、あなたは絶対に設定しなければならないことを確認すべてこの:-)を簡素化何が起こっているのかわかりませんルートsvgノードの幅と高さの属性。 – Kaiido