如何从base64数据字符串中保存PNG图片服务器端

我正在使用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”收到的数据块看起来像

从这一点开始,我很困惑。通过阅读,我相信应该使用PHP的 imagecreatefromstring

函数,但是我不确定如何从base64编码的字符串实际创建实际的PNG图像并将其存储在服务器上。请帮忙!

回答:

您需要从该字符串中提取base64图像数据,对其进行解码,然后可以将其保存到磁盘,因为它已经是png,所以不需要GD。

$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);

以上是 如何从base64数据字符串中保存PNG图片服务器端 的全部内容, 来源链接: utcz.com/qa/425606.html

回到顶部