我想将HTML页面转换为图像,当我使用下面的代码时,我得到的结果与我期望的结果不相符。
html2canvas($("#sharedOne"), {
onrendered: function (canvas) {
console.log("canvas",canvas)
var imgsrc = canvas.toDataURL("image/png");
console.log(imgsrc);
}
});
这是HTML
的屏幕截图
这是运行上面代码的结果的屏幕截图。
当我使用下面的代码时,我收到一个错误:
var canvas = document.getElementById('sharedOne');
console.log("CSSSS",canvas)
var t = canvas.toDataURL("image/png");
console.log("chart",t)
错误是:
错误canvas.toDataURL不是函数
我为此问题创建了示例,请检查
https://jsfiddle.net/solanki/hku6r7g2/
注意: HTML页面包含高图图表
答案 0 :(得分:0)
.toDataURL()
只能在<canvas>
元素上调用;它不能用于任意HTML。
console.log("Canvas:");
var theCanvas = document.getElementById('theCanvas');
var a = theCanvas.toDataURL("image/png");
console.log(a); // this will work
console.log("Div:");
var theDiv = document.getElementById('theDiv');
// this will throw the "not a function" error:
var b = theDiv.toDataURL("image/png");
&#13;
<div id="theDiv"></div>
<canvas id="theCanvas"></canvas>
&#13;
您首次使用的html2canvas插件会根据原始HTML创建一个<canvas>
元素,因此您可以使用.toDataURL()
- 但它不支持SVG,这就是您的图表的原因在输出中不可见。
可以在此处找到将HTML转换为图像的其他一些技术(旧的,但我不会在最初看到更新的内容)问题:Render HTML to an image
同时,要将SVG转换为图像,请参阅Convert SVG to image (JPEG, PNG, etc.) in the browser
您可以按顺序链接这些技术:首先将SVG转换为jpeg或png,然后将包含图像的HTML转换为<canvas>
,然后在上使用.toDataURL
该 ...
答案 1 :(得分:0)
据我分析了这个问题,我发现这涉及到将SVG转换为PNG(SVG - &gt; Canvas - &gt; PNG)。对于这种情况,html2canvas可能无法正常工作。
由于Highcharts使用SVG渲染图形和图表,因此需要将svg转换为canvas而不是HTML。 html2canvas是一个非常好的HTML到画布转换器,但它似乎是not designed to convert svg's或may render faulty。
在搜索Google时,我发现了一些名为Canvg的东西,我觉得这可能对你有帮助。所以我使用它进行了编码,结果很好。下面我附上了您可以使用的代码片段:
<html>
<head></head>
<body>
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<!--
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js">
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.svg.js"></script>
-->
<script type="text/javascript" src="http://canvg.github.io/canvg/rgbcolor.js"></script>
<script type="text/javascript" src="http://canvg.github.io/canvg/StackBlur.js"></script>
<script type="text/javascript" src="http://canvg.github.io/canvg/canvg.js"></script>
<div id="sharedOne">
<div id="container"></div>
<button class="clickGrn">
GENERATE IMAGE
</button>
</div>
<div id="img">
<img id="newimg">
</div>
<script>
Highcharts.chart('container', {
title: {
text: 'Solar Employment Growth by Sector, 2010-2016'
},
subtitle: {
text: 'Source: thesolarfoundation.com'
},
yAxis: {
title: {
text: 'Number of Employees'
}
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle'
},
plotOptions: {
series: {
pointStart: 2010
}
},
series: [{
name: 'Installation',
data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
}, {
name: 'Manufacturing',
data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434]
}, {
name: 'Sales & Distribution',
data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387]
}, {
name: 'Project Development',
data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227]
}, {
name: 'Other',
data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111]
}]
});
/*
YOU SHALL REPLACE THE FOLLOWING CODE WITH THE CODE PROVIDED BELOW
=================================================================
$("body").on("click", ".clickGrn", function () {
alert("Calll");
html2canvas($("#sharedOne"), {
allowTaint: true,
onrendered: function (canvas) {
canvg('canvas', canvas);
var imgsrc = canvas.toDataURL("image/jpg");
console.log(imgsrc);
$("#newimg").attr('src', imgsrc);
}
});
});
*/
$("body").on("click", ".clickGrn", function () {
var canvasSharedOne = document.createElement("canvas");
var HighChartsSVG=$('#container').find('svg')[0].outerHTML;
canvg(canvasSharedOne, HighChartsSVG);
var imgsrc = canvasSharedOne.toDataURL();
document.getElementById('newimg').src = imgsrc;
});
</script>
</body>
</html>
但是,是的,我仍然在尝试使用最新版本的html2canvas,其中包含一个额外的html2canvas.svg.js
但无法弄清楚如何使用它,因为创建者已经从头开始新编写了库。他还指定添加了SVG渲染支持。在阅读代码时,我认为他已经使用FabricJS进行画布支持。
由于它是新的,我们不能指望代码示例,因为它仍处于开发阶段。
答案 2 :(得分:0)
看起来它适用于html2canvas的beta版本(0.5.0-beta4)。
$('#convert').bind('click', function() {
html2canvas($("#main-container"), {
onrendered: function(canvas) {
var imgsrc = canvas.toDataURL("image/png");
$('<img src="' + imgsrc + '" />').appendTo('#main-container');
}
});
});