【问题标题】:Black area when exporting graph from svg (d3.js) to jpg将图形从 svg (d3.js) 导出为 jpg 时出现黑色区域
【发布时间】:2014-09-09 14:24:07
【问题描述】:

我正在尝试使用 javascript 将图形从 SVG(通过 d3.js 获得)导出到 JPG 图像。

事实是最终图像没有正确显示图片,但它绘制了一个黑色区域,包围了图形的线条。 Here 他们是两张图片。页面顶部显示的是 SVG,而最终的 JPG 图像是描述的。

我写的代码如下:

    root_node = d3.select("svg")
      .attr("version", 1.1)
      .attr("xmlns", "http://www.w3.org/2000/svg")
      .node();

    s_xml = (new XMLSerializer).serializeToString(root_node);

    var imgsrc = 'data:image/svg+xml,'+ s_xml;
    var img = '<img src="'+imgsrc+'">';

    var canvas = document.createElement("canvas");

    canvas.width = 1600;
    canvas.height = 600;

    context = canvas.getContext("2d");

    var image = new Image;
    image.src = imgsrc;
    image.onload = function() {
        context.drawImage(image, 0, 0);
        context.fillStyle = 'white';
        context.globalCompositeOperation = "destination-over";
        context.fillRect(0, 0, canvas.width, canvas.height);

        var canvasdata = canvas.toDataURL("image/jpeg");
        var jpgimg = '<img src="'+canvasdata+'">';
        d3.select("body").append("svgdataurl").html(jpgimg);

    });

有人知道颜色转换错误的原因吗?提前致谢!

【问题讨论】:

  • 能否将 SVG 的源代码添加到问题中?
  • 我猜在你的 CSS 中你已经声明路径的填充是无的。这在您转换时不会被拾取,您必须在 D3 代码中设置样式等。
  • SVG的源码可以咨询here

标签: svg d3.js todataurl


【解决方案1】:

您必须直接在 D3 代码中为折线图提供 CSS。

lineChart.append("path")
.attr("class", "lineChart")
.attr("stroke-width", 1)
.attr("fill","none")
.attr("d", valueline(lineChartData));

【讨论】:

  • 拯救了我的一天 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2020-10-20
  • 2018-01-03
  • 2017-12-01
  • 2014-07-27
  • 2023-04-10
相关资源
最近更新 更多