Php 解码base64字符串会得到一个黑色矩形图像

Php 解码base64字符串会得到一个黑色矩形图像,php,canvas,Php,Canvas,我正在尝试从画布中获取一个图像,并用我的php脚本保存它。但是当脚本运行时,我得到了一个简单的黑色矩形,而不是我的画布图像(网络摄像头快照)。 这是我的密码: $img = $base64Img; $img = str_replace('data:image/png;base64,', '', $img); $img = str_replace(' ', '+', $img); $data = base64_decode($img); $file = "photo/" . uniqid() .

我正在尝试从画布中获取一个图像,并用我的php脚本保存它。但是当脚本运行时,我得到了一个简单的黑色矩形,而不是我的画布图像(网络摄像头快照)。 这是我的密码:

$img = $base64Img;
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = "photo/" . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';

这一行的目的是什么:

$img = str_replace(' ', '+', $img);
我觉得没必要。 否则一切都会好起来的

我通常使用php
explode
来隔离数据:

$exploded = explode(',', $img);
$base64 = $exploded[1];
$data = base64_decode($base64);
但是
str\u replace
也应该做这项工作

可能错误在加载图像的代码中

更新 该行的目的是对base64数据中的空白进行编码。 这一点也在本文中提到。 在这种情况下,最好使用PHP函数
urlencode

$data = base64_decode($data);

这一行可能会导致此问题,因为数据不是用作数据url,而是直接保存到文件中。

这一行的目的是什么:

$img = str_replace(' ', '+', $img);
我觉得没必要。 否则一切都会好起来的

我通常使用php
explode
来隔离数据:

$exploded = explode(',', $img);
$base64 = $exploded[1];
$data = base64_decode($base64);
但是
str\u replace
也应该做这项工作

可能错误在加载图像的代码中

更新 该行的目的是对base64数据中的空白进行编码。 这一点也在本文中提到。 在这种情况下,最好使用PHP函数
urlencode

$data = base64_decode($data);

这一行可能导致了这一问题,因为数据没有用作数据url,而是直接保存到文件中。

同样
list(,$base64)=explode(,“,”,$img,2)
用于隔离数据PHP.net上有一条关于str_replace的注释:“如果要保存从Javascript canvas.toDataURL()函数派生的数据,必须将空格转换为加号。如果不这样做,则解码的数据已损坏:”@谢谢你的评论!非常有用。我将更新我的答案并参考链接…同时
list(,$base64)=explode(,“,$img,2)
用于隔离数据PHP.net上有一条关于str_replace的注释:“如果要保存从Javascript canvas.toDataURL()函数派生的数据,必须将空格转换为加号。如果不这样做,则解码的数据已损坏:”@谢谢你的评论!非常有用。我将更新我的答案并参考链接。。。