我想要一张PNG图片,但是当访问它时,它运行一个PHP脚本,PHP脚本应该决定发送什么图片(使用一些if语句等等)。然后PHP脚本应该从我的Web服务器上的某个地方读取图像文件并输出它。
这是问题,如果我得到一个.png文件,并在其中放入PHP代码,它就不会工作,但是,如果我使用.php扩展名,它可以工作,我甚至可以嵌入将图像写入其他网站,PHP可以决定要发送的图像,但如果我想直接查看该图像(将其复制到我的地址栏中)它不起作用,它会给我图像普通内容(随机乱码)。
任何人都知道该怎么做?
这也是我关于Stack Overflow的第一个问题 - 如果我做错了,请告诉我。
答案 0 :(得分:7)
您需要发送Content-Type
标题。
png
:
header('Content-Type: image/png');
其他人将png
更改为jpg
或gif
或bmp
或其他任何内容。
请注意,在将任何内容写入输出之前,必须使用header()
函数。
答案 1 :(得分:2)
首先,请确保您的图像 image.png 可以通过php访问。
然后创建一个php脚本 image.php :
<?php
header('Content-Type: image/png');
readfile('image.png');
现在脚本就像是一张PNG图像。
答案 2 :(得分:2)
听起来您知道如何发送图片,您的问题是您希望网址看起来像是PNG图片。
你可以做几件事。首先,如果您的Web服务器支持URL重写(如Apache的mod_rewrite
模块),您可以使用重写规则,以便用户像http://example.com/generated_image.png
那样访问脚本,但您的服务器将翻译/重写此URL直接指向您的PHP脚本,如/var/www/image_generator.php
。
另一种选择是将脚本命名为“generated_image.png”,但强制您的网络服务器将其视为PHP脚本。例如,在Apache中你可以尝试类似的东西:
<Location /generated_image.png>
ForceType application/x-httpd-php
</Location>
最后请注意,如果您实际上并不担心URL,但担心如果用户决定将其保存到磁盘时使用的文件名,则只需使用Content-Disposition
HTTP标头即可在你的回复中。在PHP中,它看起来像这样:
<?php
header("Content-Disposition: inline; filename="generated_image.png");
?>
这样,URL无关紧要,如果用户通过Web浏览器保存图像,Web浏览器应提供“generated_image.png”作为默认文件名。
答案 3 :(得分:1)
我知道最简单的版本......
<?php
header('Content-Type: image/png');
if(whatever)
{
$image=your_image_select_function();
}
// as suggested by sh1ftst0rm with correction of unmatched quotes.
header('Content-Disposition: inline; filename="'.$your_name_variable.'"');
readfile($image);
?>
然后,您将其视为图像文件。也就是说,如果这是“pngmaker.php”,则在HTML文档中执行
<img src="pngmaker.php">
你甚至可以做
<img src="pngmaker.php/?id=123&user=me">