Php 将生成的映像文件交付给客户端,而无需先将该文件写入服务器目录

Php 将生成的映像文件交付给客户端,而无需先将该文件写入服务器目录,php,image,image-processing,png,Php,Image,Image Processing,Png,尽管将目录权限设置为777,但我仍然无法获取PHP脚本来编写生成到服务器上目录的图像文件。所以,我想,与其与这个问题作斗争,不如创造一个新的问题。事实上,我认为可能有一个更简单的解决办法。是否可以获取服务器上生成的图像文件(流)并“欺骗”客户端,使该文件不必存在于服务器上的目录中,以便直接将结果传递给浏览器?当然。假设您在变量$im中有二进制数据。只要做: header("Content-type: image/png"); //change to suit your needs echo $i

尽管将目录权限设置为777,但我仍然无法获取PHP脚本来编写生成到服务器上目录的图像文件。所以,我想,与其与这个问题作斗争,不如创造一个新的问题。事实上,我认为可能有一个更简单的解决办法。是否可以获取服务器上生成的图像文件(流)并“欺骗”客户端,使该文件不必存在于服务器上的目录中,以便直接将结果传递给浏览器?

当然。假设您在变量
$im
中有二进制数据。只要做:

header("Content-type: image/png"); //change to suit your needs
echo $im;

PHP完全能够输出非HTML数据。

如果用作图像URI

将数据转换为base64(
base64\u encode
),并将其用作URI:

data:MIMETYPE;base64,STUFF
e、 g

如果仅显示图像


只需将内容类型设置为正确的MIME并回显内容。

是的,这是可能的。将内容类型标题设置为“image/png”,然后输出图像数据流

header("Content-type: image/png");

如果您只是动态地制作图像,则不需要编写文件。 就在php文件的顶部,将文件类型设置为“image/png”(或其他任何形式),并编写图形而不是文本

<?php
$width = 300;
$height = 200;
$im     = imagecreate($width,$height);
$gray   = imagecolorallocate ($im,0xcc,0xcc,0xcc);
imagefilledrectangle($im,0,0,100,100,$grey);
header ("Content-type: image/png");
imagepng($im);
?> 


@Michael Prescott-使用上述Artefactor方法是完全兼容的代码,不会“欺骗”浏览器。二进制数据是以mime类型image/png的对象形式输入的,因此,如果它是png数据,那么这将起作用。对于jpeg,它只是标题(“内容类型:image/jpeg”);对于gif,它将是标题(“内容类型:image/gif”);IE系列中对数据URI的支持存在缺陷,尽管您是否尝试添加错误报告(E_ALL)来检查问题的原因?对于您之前的问题,请注意,php用户(www Data?)不仅需要在目录上读/写/执行,而且还需要在所有父目录上执行。(此处为半相关问题:)
<?php
$width = 300;
$height = 200;
$im     = imagecreate($width,$height);
$gray   = imagecolorallocate ($im,0xcc,0xcc,0xcc);
imagefilledrectangle($im,0,0,100,100,$grey);
header ("Content-type: image/png");
imagepng($im);
?>