我正在使用外部文件中的svg地图。我使用"对象"将其插入到我的html代码中标签
<object id="mymap" data="map.svg" width="884" height="760" type="image/svg+xml" ></object>
在javascript中,我用一些给定的颜色绘制svg地图的路径。例如:
<script>
var path1 = document.getElementById('mymap').getSVGDocument().getElementById('path1');
path1.style.fill='#f00';
var path2 = document.getElementById('mymap').getSVGDocument().getElementById('path2');
path2.style.fill='#0f0';
</script>
如何将生成的彩色地图导出为PNG图像?
- 更新 - :问题已得到解答,LiveExample现在包含解决方案以供将来参考。您可以查看源并获得解决方案。该示例绘制地图并将绘制的地图保存在画布中,然后您可以将其另存为文件
答案 0 :(得分:1)
解决方案如下: 根据我接受的解决方案,我提供了管理所有步骤的完整javascript
创建画布
<canvas id="canvas" style="border:1px solid black;" width="884" height="760"></canvas>
从画布svg
中抽取画布function drawCanvas(){
// create a canvas and context
var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
// define svgdocument and make blob containing its data
var svgDoc = document.getElementById('mymap').getSVGDocument();
var svg = new Blob([svgDoc.lastChild.outerHTML], {type: 'image/svg+xml;charset=utf-8'});
// create a new image
var DOMURL = window.URL || window.webkitURL || window;
var url = DOMURL.createObjectURL(svg);
var img = new Image();
img.onload = function(){
ctx.drawImage(img,0,0,884,760);
DOMURL.revokeObjectURL(url);
};
img.src = url;
}
答案 1 :(得分:0)
如何将svg绘制到画布上,然后使用.toDataURL
获取PNG图像?
- Update-- 为了快速测试,我在现场演示中在控制台中运行以下内容:
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var svgDoc = document.getElementById('mymap').getSVGDocument();
var svg = new Blob([svgDoc.lastChild.outerHTML], {type: 'image/svg+xml;charset=utf-8'});
var img = new Image();
img.onload = function(){ ctx.drawImage(img,0,0); };
img.src = url
你应该看到有图像绘制的url,此时只需调用.toDataURL就可以得到base64图像数据