为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2019-06-25 13:42:55
如何从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映像并将其存储在我的服务器上。请帮忙!
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您需要从该字符串中提取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);


查看完整回答
反对 回复 2019-06-25
?
RISEBY

TA贡献1856条经验 获得超5个赞

试试这个:

file_put_contents('img.png', base64_decode($base64string));

文件放置内容文档


查看完整回答
反对 回复 2019-06-25
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

我不得不用加号替换空格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);

希望能帮上忙。


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 487 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信