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

2022-08-30 22:58:32

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

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

这不起作用。

这在单个PHP文件中是否可行?

提前致谢!


答案 1

这里的诀窍是使用输出缓冲来捕获输出,这会将输出发送到浏览器或文件。它不会将其返回以存储在变量中(或 base64 编码):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>';

这是改编自 imagepng() 文档中的用户示例。


答案 2

在将PHP与AJAX一起使用时,我在使用ob_get_contents()时遇到问题,所以我尝试了这个:

$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);

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


推荐