使用php从给定的谷歌图表api url下载图像文件

时间:2011-04-13 13:11:04

标签: php

我想使用<a href="">Download</a>之类的链接下载此网址返回的图片,点击此链接下载框应该会出现,以便用户可以将图像保存到他/她的系统中。这是返回图片的网址

http://chart.apis.google.com/chart?chs=300x300&cht=qr&chld=L|0&chl=http%253A%252F%252Fnetcane.com%252Fprojects%252Fyourl%252F3

我不想将图像保存到服务器吗?

3 个答案:

答案 0 :(得分:4)

原始问题

您可以通过在服务器上设置简单的PHP下载脚本,将文件流式传输或代理给用户。当用户点击下面的download.php脚本时,它会设置正确的标题,以便他们的浏览器要求他们保存下载。然后,它会将图表图像从谷歌流式传输到用户浏览器。

在您的HTML中:

<a href="download.php">Download</a>

在download.php中:

header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="chart.png"');
$image = file_get_contents('http://chart.apis.google.com/chart?chs=300x300&cht=qr&chld=L|0&chl=http%253A%252F%252Fnetcane.com%252Fprojects%252Fyourl%252F3');
header('Content-Length: ' . strlen($image));
echo $image;

传入动态生成的图表API URL

在您的HTML中:

<?php
$url = 'http://chart.apis.google.com/chart?my-generated-chart-api-url';
<a href="download.php?url=<?php echo urlencode($url); ?>">Download</a>

在download.php中:

$url = '';
if(array_key_exists('url', $_GET)
   and filter_var($_GET['url'], FILTER_VALIDATE_URL)) {
     $url = $_GET['url'];
}
header('Content-Type: image/png');
header('Content-Disposition: attachment; filename="chart.png"');
$image = file_get_contents($url);
header('Content-Length: ' . strlen($image));
echo $image;

答案 1 :(得分:0)

不,不是真的。由于图像是在chart.apis.google.com生成的,并且您无法控制该服务器,因此无法使其向该图像发送Content-Disposition标头;因此,浏览器将显示该图像。

你在技术上可以做什么(但我不确定Google的ToS是否允许它,更好地检查),是链接到你的服务器,它将代理下载并添加{{1标题。

答案 2 :(得分:0)

我相信你无法做到这一点。 最接近的是使用PHP动态获取图像数据,然后使用标题 Content-Disposition:attachment;文件名= qr.png

<?php

$img_data = file_get_contents("http://chart.apis.google.com/chart?chs=300x300&cht=qr&chld=L|0&chl=http%253A%252F%252Fnetcane.com%252Fprojects%252Fyourl%252F3");
header("Content-Type: image/png");
header("Content-Length: " . strlen($img_data));
header("Content-Disposition: attachment; filename=qr.png");
print $img_data;

?>

代码未经测试,但我认为你得到了它的要点。 希望它能满足您的需求。