gpt4 book ai didi

php - 如何从 base64 数据 URI 保存 PNG 图像服务器端

转载 作者:IT老高 更新时间:2023-10-28 11:40:46 25 4
gpt4 key购买 nike

我正在使用 Nihilogic 的“Canvas2Image”JavaScript 工具将 Canvas 绘图转换为 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”收到一个看起来像 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABE...

的数据 block

从这一点开始,我几乎被难住了。根据我的阅读,我相信我应该使用 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 = str_replace( ' ', '+', $data );
$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);

关于php - 如何从 base64 数据 URI 保存 PNG 图像服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com