PHP - 在服务器上保存动态创建的映像

时间:2016-05-16 17:38:53

标签: php

我正在尝试使用Google QR代码生成器通过PHP创建动态图像,然后将该图像保存到服务器上的临时目录中。我想我很接近,但是我不经常在PHP中编码,所以我需要一些额外的指导。

这是我的代码:

    header("content-type: image/png");
    $url = "https://chart.googleapis.com/chart?chs=177x177&cht=qr&chl=MyHiddenCode&choe=UTF-8";
    $qr_image = imagecreatefrompng(file_get_contents($url));
    $cwd = getcwd();
    $cwd = $cwd . "/temp";
    $save = "$cwd"."/chart123.png";
    imagepng($qr_image);
    chmod($save,0755);
    imagepng($qr_image,$save,0,NULL);

感谢您的所有见解。

2 个答案:

答案 0 :(得分:1)

除非您实际对图像进行更改(调整大小,绘图等),否则您不需要使用GD来创建新图像。您可以使用file_get_contents来获取图片,并file_put_contents将其保存在某处。为了显示图像,只需在发送标题后回显您从file_get_contents返回的内容。

示例:

<?php
//debug, leave this in while testing
error_reporting(E_ALL);
ini_set('display_errors', 1);

$url = "url for google here";
$imageName = "chart123.png";
$savePath = getcwd() . "/temp/" . $imageName;

//try to get the image
$image = file_get_contents($url);

//try to save the image
file_put_contents($savePath, $image);

//output the image

//if the headers haven't been sent yet, meaning no output like errors
if(!headers_sent()){
    //send the png header
    header("Content-Type: image/png", true, 200);

    //output the image
    echo $image;
}

答案 1 :(得分:1)

我猜你的代码太多,使用类似的东西:

header("content-type: image/png");
$img = file_get_contents("https://chart.googleapis.com/chart?chs=177x177&cht=qr&chl=MyHiddenCode&choe=UTF-8");
file_put_contents(getcwd()."/temp/chart123.png", $img);
echo $img;

请注意,由于图片已由googleapis生成,因此您不需要使用GD库,这就足够了:

$(function () {
            var i = tabdate.length;
    $('#daily').highcharts({
       chart: {
                type: 'area'
            },
            title: {
                text: 'Statistiques journalières'
            },
            subtitle: {
                text: ''
            },
        xAxis: {
            type: 'datetime',
            dateTimeLabelFormats: { // don't display the dummy year
                month: '%e. %b',
                year: '%b'
            },
            title: {
                text: 'Date'
            }
        },
        yAxis: {
            title: {
                text: 'Snow depth (m)'
            },
            min: 0
        },
        tooltip: {
            headerFormat: '<b>{series.name}</b><br>',
            pointFormat: '{point.x:%e. %b}: {point.y:.2f} m'
        },

        plotOptions: {
            spline: {
                marker: {
                    enabled: true
                }
            }
        },

        series: [{
            name: 'Winter 2013-2014',
            data: [
               HERE
            ]
        }]
    });
});