解决PHP中的image图像对象转换为base64的方法
image对象转换base64
在使用php合成图片的时候,我遇到了这么一个问题。
$img = imagecreatetruecolor($graphWidth,$graphHeight);
.....
header("Content-type: image/png");
imagepng($img);
最终我要求的是将生成的图片对象,输出为Base64然后传送给前端,让前端接收。
解决:
之所以不起作用,是因为其中的图像$img
是资源,而不是实际的PNG图像。当您调用时imagepng()
,它将输出图像。我要做的是创建一个输出缓冲区,并对其进行base-64编码。
ob_start();
imagepng($img);
$buffer = ob_get_clean();
ob_end_clean();
echo base64_encode($buffer);
最后,要忘记更改Content-Type
标题,因为它不再是image/png
。
最终转换为base64可以访问的格式是:
// 创建缓冲区
ob_start();
imagepng($img);
$buffer = ob_get_clean();
ob_end_clean();
$base64 = base64_encode($buffer);
$imageData = 'data:'. "image/png" . ';base64,' . $base64;
echo $imageData;
注意,一个有效的base64格式为:
data:image/png;base64, ...........
可以使用这个工具查看:http://tool.wubin.com/img2base64
图片转换为base64
php转换本地图片为base64
$filename = 'xxxx'; //本地图片在服务器上的路径
$imageDetails = getimagesize($filename);
if ($fp = fopen($filename,"rb", 0)) {
$picture = fread($fp,filesize($filename));
fclose($fp);
$base64 = chunk_split(base64_encode($picture));
$imageData = 'data:'.$imageDetails['mime'].';base64,' . $base64;
//输出base64图片代码...
echo $imageData;
}
php将远程图片转为base64的方法
$img_url = ''; //远程图片地址
$imageInfo = getimagesize($img_url);
$content = @file_get_contents($img_url);
$base64Data = 'data:'.$imageInfo['mime'].';base64,'.base64_encode($content);
//输出base64图片数据流
echo $base64Data;