我有一段简单的代码,可以将来自Google帖子请求的流作为PNG输出。这是使用谷歌创建QRcode。我想要做的是将其保存为我的服务器上的PNG文件,我似乎无法弄清楚如何解决它,因为我对使用流不太熟悉。这是代码:
<?php
//This script will generate the slug ID and create a QRCode by requesting it from Google Chart API
header('content-type: image/png');
$url = 'https://chart.googleapis.com/chart?';
$chs = 'chs=150x150';
$cht = 'cht=qr';
$chl = 'chl='.urlencode('Hello World!');
$qstring = $url ."&". $chs ."&". $cht ."&". $chl;
// Send the request, and print out the returned bytes.
$context = stream_context_create(
array('http' => array(
'method' => 'POST',
'content' => $qstring
)));
fpassthru(fopen($url, 'r', false, $context));
?>
答案 0 :(得分:2)
这是一种方法,根据您的代码并指定'将其另存为我的服务器上的PNG文件':
<?php
$url = 'https://chart.googleapis.com/chart?';
$chs = 'chs=150x150';
$cht = 'cht=qr';
$chl = 'chl='.urlencode('Hello World!');
$qstring = $url ."&". $chs ."&". $cht ."&". $chl;
$data = file_get_contents($qstring);
$f = fopen('file.png', 'w');
fwrite($f, $data);
fclose($f);
添加错误检查等。
答案 1 :(得分:1)
要将结果写入文件,请使用fwrite()而不是fpassthru()。
您可以使用file_get_contents()和file_put_contents(),但这些需要将整个图像存储在字符串中,这对于大图像来说可能是内存密集型的。这不是问题,因为qrcode图像很小,但总的来说值得思考。
您实际上不需要创建流上下文,因为Web服务可以通过HTTP GET而不是POST工作。
还有一个名为http_build_query()的函数,您可以使用它来简化URL的构建。
<?php
$url = 'https://chart.googleapis.com/chart?' . http_build_query(array(
'chs' => '150x150',
'cht' => 'qr',
'chl' => 'Hello World!'
));
$src = fopen($url, 'rb');
$dst = fopen('file.png', 'w');
while (!feof($src)) {
fwrite($dst, fread($src, 1024));
}
?>