PHP:使用ImagePng创建图像并在单个文件中使用base64_encode进行转换?

问题描述 投票:15回答:3

我用ImagePng()创建了一个图像。我不希望它将图像保存到文件系统,但希望将其输出到与base64编码在线图像相同的页面上,如同

print '<p><img src="data:image/png;base64,'.base64_encode(ImagePng($png)).'" alt="image 1" width="96" height="48"/></p>';

这不起作用。

这可能在一个PHP文件中完成吗?

提前致谢!

php image gd
3个回答
29
投票

这里的技巧是使用输出缓冲来捕获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); 中的用户示例改编的


5
投票

在使用PHP和AJAX时我使用ob_get_contents()时遇到了麻烦,所以我尝试了这个:

ob_start()

这会在服务器上保存临时图像文件,然后在编码和回显后将其删除。


0
投票

如果您不希望存储到显式文件,并且您已经在使用stream_wrapper_register进行其他操作(因此在没有大量重构的情况下不能使用ob_start),您可以定义自己的流包装器来存储流输出到一个变量。

您使用stream_write注册一个新的流包装器,并实现其imagepng方法将其写入一个您可以在以后检索其值的变量。然后你传递这个流(实际上你只需要传递这个流的URI)到imagepng。想要关闭你的流的stream_close不会打扰你,只要你的流包装器在关闭时不会破坏数据(称为qazxswpoi方法)。

© www.soinside.com 2019 - 2024. All rights reserved.