如何从base 64数据字符串保存png映像服务器端

如何从base 64数据字符串保存png映像服务器端

我正在使用Nihilogic的“Canvas2Image”JavaScript工具将画布绘图转换为PNG图像。我现在需要的是使用PHP将这个工具生成的base 64字符串转换为服务器上的实际PNG文件。

简而言之,我目前正在做的是使用Canvas2Image在客户端生成一个文件,然后检索Base 64编码的数据并使用Ajax将其发送到服务器:

// Generate the image filevar image = Canvas2Image.saveAsPNG(canvas, true);  
 image.id = "canvasimage";canvas.parentNode.replaceChild(image, canvas);var url = 'hidden.php',data = $('#canvasimage').attr('src');$.ajax({ 
    type: "POST", 
    url: url,
    dataType: 'text',
    data: {
        base64data : data    }});

此时,“hidden.php”接收的数据块如下所示资料来源:PNG;BASE 64,iVBO卢旺达0KGgoAAAANSUHEUAABE.

从现在开始,我很困惑。据我所读,我认为我应该使用PHP镜像字符串函数,但我不知道如何从Base 64编码的字符串创建实际的PNG映像并将其存储在我的服务器上。请帮忙!


慕码人8056858
浏览 523回答 3
3回答

尚方宝剑之说

您需要从该字符串中提取base 64映像数据,对其进行解码,然后可以将其保存到磁盘中,您不需要GD,因为它已经是一个PNG。$data = 'data:image/png;base64,AAAFBfj42Pj4';list($type, $data) = explode(';', $data); list(, $data)      = explode(',', $data);$data = base64_decode($data);file_put_contents('/tmp/image.png', $data);作为一个整体:$data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $data));提取、解码和检查错误的一种有效方法是:if (preg_match('/^data:image\/(\w+);base64,/', $data, $type)) {     $data = substr($data, strpos($data, ',') + 1);     $type = strtolower($type[1]); // jpg, png, gif     if (!in_array($type, [ 'jpg', 'jpeg', 'gif', 'png' ])) {         throw new \Exception('invalid image type');     }     $data = base64_decode($data);     if ($data === false) {         throw new \Exception('base64_decode failed');     }} else {     throw new \Exception('did not match data URI with image data');}file_put_contents("img.{$type}", $data);

RISEBY

试试这个:file_put_contents('img.png', base64_decode($base64string));文件放置内容文档

一只甜甜圈

我不得不用加号替换空格str_replace(' ', '+', $img);才能让它发挥作用。这是完整的代码$img = $_POST['img']; // Your data 'data:image/png;base64,AAAFBfj42Pj4';$img = str_replace('data:image/png;base64,', '', $img); $img = str_replace(' ', '+', $img);$data = base64_decode($img);file_put_contents('/tmp/image.png', $data);希望能帮上忙。
打开App,查看更多内容
随时随地看视频慕课网APP