从base64数据字符串
我使用Nihilogic的“Canvas2Image”JavaScript工具将画布图形转换为PNG图像。 我现在需要的是使用PHP将这个工具生成的base64字符串转换为服务器上的实际PNG文件。
总之,我目前正在做的是使用Canvas2Image在客户端生成一个文件,然后检索base64编码的数据并使用AJAX将其发送到服务器:
// Generate the image file
var 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”接收一个数据块,看起来像数据:image / png; base64,iVBORw0KGgoAAAANSUhEUgAABE ...
从这一刻起,我几乎陷入了困境。 从我读过的内容中,我相信我应该使用PHP的imagecreatefromstring函数,但我不确定如何从base64编码的字符串中实际创建实际的PNG图像并将其存储在我的服务器上。 请帮助!
您需要从该字符串中提取base64图像数据,对其进行解码,然后将其保存到磁盘,您不需要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);
尝试这个:
file_put_contents('img.png', base64_decode($base64string));
file_put_contents文档
我不得不用空格替换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);
希望有所帮助。
链接地址: http://www.djcxy.com/p/67817.html