无法将我的svg下载到png

时间:2017-01-15 08:59:19

标签: javascript jquery canvas svg canvg

谁能告诉我为什么我的svg不能下载?我究竟做错了什么?我似乎找不到如何将我的svg下载到png的解决方案。是我的库还是我的代码?

function save(){
    $("#editor_save").click(function() {
        // the canvg call that takes the svg xml and converts it to a canvas
        canvg('canvas', $("#editor").html());

        // the canvas calls to output a png
        var canvas = document.getElementById("canvas");
        var img = canvas.toDataURL("image/png");
        // do what you want with the base64, write to screen, post to server, etc...
    });
}
<script src="canvg-master/canvg.js"></script>
<div id="editor" class="chart">
    <svg width="100" height="100">
        <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="red" />
    </svg><br />
    <button id="editor_save" onclick="save">Save</button>
</div>

1 个答案:

答案 0 :(得分:0)

你有很多问题:

  • canvg顾名思义就是在画布上工作,你甚至可以在你从this answer复制的代码中调用getElementById("canvas")但是尽管你实际上没有画布元素你问题的标记
  • 您正在使用.html()从div获取数据,但div不仅包含svg,还有<br />和按钮
  • 您已将已复制的代码包装在保存功能中,但不会从任何地方调用保存功能
  • 您没有正确包含正确的画布脚本
  • 你没有包含jQuery但是你正在使用那个库

在我更正的代码中,我将画布div显示为可见,因此您可以看到它正常工作。 Te canvas通常是display:none,你可以用img对象做其他事情。

$("#editor_save").click(function() {

// the canvg call that takes the svg xml and converts it to a canvas
  canvg('canvas', $("#svg")[0].outerHTML);

// the canvas calls to output a png
var canvas = document.getElementById("canvas");
var img = canvas.toDataURL("image/png");
// do what you want with the base64, write to screen, post to server, etc...
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://canvg.github.io/canvg/rgbcolor.js"></script>
<script src="http://canvg.github.io/canvg/StackBlur.js"></script>
<script src="http://canvg.github.io/canvg/canvg.js"></script>
<div id="editor" class="chart">
<svg id="svg" width="100" height="100">
  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="red" />
</svg>
<br />
<button id="editor_save">Save</button>
</div>
<div>
  <canvas id="canvas" width="1000px" height="600px"></canvas> 
</div>