SVG 到 PNG 下载器 PHP


svg to png downloader php

我有一个带有一些图形的网页。图形是使用谷歌图表API构建的。图形是SVG格式的,我想要一个按钮,当我单击它时,生成一个PNG图像并使用"另存为"打开窗口(以保存图像)。我不明白为什么这不起作用:(

网页文件

    <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;

这个问题已经在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);
?>