我用ImagePng()创建了一个图像。我不希望它将图像保存到文件系统,但希望将其输出到与base64编码在线图像相同的页面上,如同
print '<p><img src="data:image/png;base64,'.base64_encode(ImagePng($png)).'" alt="image 1" width="96" height="48"/></p>';
这不起作用。
这可能在一个PHP文件中完成吗?
提前致谢!
这里的技巧是使用输出缓冲来捕获imagepng()
的输出,// Enable output buffering
ob_start();
imagepng($png);
// Capture the output and clear the output buffer
$imagedata = ob_get_clean();
print '<p><img src="data:image/png;base64,'.base64_encode($imagedata).'" alt="image 1" width="96" height="48"/></p>';
将输出发送到浏览器或文件。它不会将其返回存储在变量(或base64编码)中:
the imagepng()
docs.
这是根据$id = generateID(); //Whereas this generates a random ID number
$file="testimage".$id.".png";
imagepng($image, $file);
imagedestroy($image);
echo(base64_encode(file_get_contents($file)));
unlink($file);
中的用户示例改编的
在使用PHP和AJAX时我使用ob_get_contents()时遇到了麻烦,所以我尝试了这个:
ob_start()
这会在服务器上保存临时图像文件,然后在编码和回显后将其删除。
如果您不希望存储到显式文件,并且您已经在使用stream_wrapper_register
进行其他操作(因此在没有大量重构的情况下不能使用ob_start),您可以定义自己的流包装器来存储流输出到一个变量。
您使用stream_write
注册一个新的流包装器,并实现其imagepng
方法将其写入一个您可以在以后检索其值的变量。然后你传递这个流(实际上你只需要传递这个流的URI)到imagepng
。想要关闭你的流的stream_close
不会打扰你,只要你的流包装器在关闭时不会破坏数据(称为qazxswpoi方法)。