用来自PHP的src保存图像的“另存为”图片

3

我目前是通过一个php文件输出图片来显示图片并隐藏src代码。但是,当我右键单击显示的图像并向下滚动到“另存为”时,它会提示我下载php文件而不是实际的图像(显然因为它指向该src)。

我该怎么做才能下载实际的图像而不是displayImage.php?


链接图片而不是 PHP 文件? - KingCrunch
2
你可以使用 Content-Disposition - Polynomial
哪个浏览器?在Firefox 8中执行此操作,当URL为“images.php?src=public/icons/22/warning.png”(实际源在src参数中,所有正确的MIME类型标头都在PHP文件中设置)时,我最终下载了一个名为“images.php.png”的文件(这是一个有效的png文件)。+1我以前从未见过这种情况,也不知道它。 - Wesley Murch
3个回答

6

它不会提示你下载 PHP 文件,它只是使用该文件名,因为这是从中获取图像数据的文件名。如果您手动输入有效的图像文件名并尝试打开保存的内容,则应仍然是有效的图像。

您还可以通过在 PHP 文件中包含文件名来使用 Content-Disposition: 标头给它一个明智的名称,例如:

 $filename = 'image.jpg';
 header('Content-Disposition: inline; filename="'.$filename.'"');
 // Don't forget the Content-Type as well...
 // Output image here

然而,这取决于浏览器是否明智地处理,但并非所有浏览器都能做到 :-(


我建议还包括一个内容类型头。并且还要有一个内容长度头(虽然不是必需的,但浏览器无法显示下载进度)。 - GordonM
1
@GordonM 刚刚意识到应该在您的评论同时进行指出并编辑答案 :-) - 尽管 下载进度 是无关紧要的,因为您正在执行 右键单击 -> 另存为... 所以图像已经被下载,您实际上只是将其从浏览器临时/缓存目录移动到任何您保存它的地方。 - DaveRandom
谢谢,是的,我已经有了 content-type,但添加了 Content-Disposition 头似乎可以工作。 - Jason

3
您可以在头部发送文件名。
header("Content-Type: image/png");
header('Content-Disposition: inline; filename="some.png"');

1
“attachment” 的风险是强制出现下载框,你应该使用 “inline” 替代 - 尽管总体概念是正确的 - +1 - DaveRandom

1
  1. 在图像生成器脚本中发送正确的内容类型:

    header('Content-type: image/jpg');

  2. 如果您想要在 PHP 脚本输出图像时拥有 .jpg 扩展名,则需要进行 htaccess 或 httpd.conf 重写,您可以将 .jpg 请求重写为您的 php 图像生成器脚本。

请参见 mod_rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接