我有一个带有一些图形的网页。这些图形是使用 Google Chart API 构建的。图形在 SVG 中,我想要一个按钮,当我单击它时,生成一个 PNG 图像并使用“另存为”打开窗口(以保存图像)。我不明白为什么这不起作用:(
HTML 文件
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="rgbcolor.js"></script>
<script type="text/javascript" src="canvg.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
['Task', 'Hours per Day'],
['Work', 11],
['Eat', 2],
['Commute', 2],
['Watch TV', 2],
['Sleep', 7],
['teste 1', 5],
['teste 2', 3],
['teste 3', 8],
['teste 4', 4],
['teste 5', 7]
]);
var options = {
title: 'My Daily Activities'
};
var chart = new google.visualization.PieChart(document.getElementById('svg'));
chart.draw(data, options);
}
</script>
<script type="text/javascript">
$(document).ready(function () {
$('#converter').click(function (event){
var canvas = document.getElementById("canvas");
var svg = $("#svg :last-child").html().replace(/>\s+/g, ">").replace(/\s+</g, "<").replace(" xlink=", " xmlns:xlink=").replace(/\shref=/g, " xlink:href=");
canvg(canvas, svg);
var data = canvas.toDataURL("image/png");
$('#imagem').attr('src', data);
$('#canvas').remove();
// Send the screenshot to PHP to save it on the server
var url = 'export.php';
$.ajax({
type: "POST",
url: url,
dataType: 'text',
data: {
base64data : data
}
});
});
});
</script>
</head>
<body>
<h1>Convert SVG in to PNG Imagem (Javascript)</h1>
<div id="apresentacao">
<div class="esquerda">
<h2>SVG</h2>
<div id="svg">
</div>
</div>
<div class="botao">
<input type="button" id="converter" value="Converter" />
</div>
<div class="direita">
<h2>PNG</h2>
<div class="fundo">
<canvas id="canvas" width="200px" height="200px"></canvas>
<img id="imagem"/>
</div>
</div>
</div>
</body>
PHP 文件
# we are a PNG image
header('Content-type: image/png');
# we are an attachment (eg download), and we have a name
header('Content-Disposition: attachment; filename="imagem.png"');
#capture, replace any spaces w/ plusses, and decode
$encoded = $_POST['base64data'];
$encoded = str_replace(' ', '+', $encoded);
$decoded = base64_decode($encoded);
#write decoded data
echo $decoded;