Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:使用ImagePng创建图像,并在单个文件中使用base64_编码进行转换?_Php_Image_Gd - Fatal编程技术网

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

PHP:使用ImagePng创建图像,并在单个文件中使用base64_编码进行转换?,php,image,gd,Php,Image,Gd,我已经用ImagePng()创建了一个图像。我不希望它将图像保存到文件系统,但希望将其输出到与base64 encode inline image相同的页面上,如 print '<p><img src="data:image/png;base64,'.base64_encode(ImagePng($png)).'" alt="image 1" width="96" height="48"/></p>'; 打印“”; 这是行不通的 这在一个PHP文件中是可能

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

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

”;
这是行不通的

这在一个PHP文件中是可能的吗


提前谢谢

这里的诀窍是使用输出缓冲从
imagepng()
捕获输出,它将输出发送到浏览器或文件。它不会返回存储在变量(或base64编码)中的值:

//启用输出缓冲
ob_start();
图像png($png);
//捕获输出并清除输出缓冲区
$imagedata=ob_get_clean();
打印“

”;

这是根据

中的一个用户示例改编的。在使用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);

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

如果您不希望存储到显式文件,并且您已经在使用
ob\u start()
进行其他操作(因此,在这种情况下,如果不进行大量重构,则无法使用ob\u start),您可以定义自己的流包装器,用于将流输出存储到变量


使用
stream\u wrapper\u register
注册一个新的流包装器,并实现其
stream\u write
方法将其写入一个变量,该变量的值可在以后检索。然后将此流(实际上您只需要将此流的URI传递给
imagepng
imagepng
想要关闭流不会打扰您,只要流包装器在关闭时不会破坏数据(
stream\u close
方法已调用)。

这应该比使用文件或输出缓冲更可取。
$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);