PHP:使用ImagePng创建图像,并在单个文件中使用base64_编码进行转换?
我已经用ImagePng()创建了一个图像。我不希望它将图像保存到文件系统,但希望将其输出到与base64 encode inline image相同的页面上,如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文件中是可能
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);