0

我有一个带有一些图形的网页。这些图形是使用 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;
4

1 回答 1

0

这个问题已经在stackoverflow上问过了。谷歌上的快速搜索显示以下内容:https ://stackoverflow.com/a/13824542/2332336

在图像数据作为 Base64 编码字符串发布到的 PHP 文件中,您可以将其直接保存在数据库中或服务器上的文件中:

<?php

// Get the request
$data = $_GET['data'];

// Save image to file
$h = fopen('chart.png', 'w');
fwrite($h, base64_decode($data));
fclose($h);

?>
于 2013-10-16T14:07:50.043 回答