当前位置: 首页 > 面试题库 >

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

龚苏燕
2023-03-14
问题内容

我正在使用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”收到的数据块看起来像 data:image / png;
base64,iVBORw0KGgoAAAANSUhEUgAABE …

从这一点开始,我很困惑。通过阅读,我相信应该使用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);


 类似资料:
  • 问题内容: 我正在使用Nihilogic的“ Canvas2Image” JavaScript工具将画布图形转换为PNG图像。现在,我需要使用PHP将此工具生成的base64字符串转换为服务器上的实际PNG文件。 简而言之,我当前正在做的是使用Canvas2Image在客户端生成一个文件,然后检索base64编码的数据,并使用AJAX将其发送到服务器: 此时,“ hidden.php”收到的数据块

  • 从现在开始,我就被难住了。根据我所读到的内容,我相信我应该使用PHP的imagecreatefromstring函数,但我不确定如何从base64编码的字符串创建一个实际的PNG映像并将其存储在服务器上。请救命!

  • 本文向大家介绍java实现图片转base64字符串 java实现base64字符串转图片,包括了java实现图片转base64字符串 java实现base64字符串转图片的使用技巧和注意事项,需要的朋友参考一下 java 图片转base64字符串、base64字符串转图片,具体内容如下 1. 图片转base64字符串: 2. base64字符串转图片: 3. 测试: 效果图: 以上就是本文的全部内

  • 问题内容: 我正在尝试将屏幕截图输出作为base64编码的字符串输出,但距离不是很远。到目前为止,我拥有的代码使用Base64库(http://iharder.sourceforge.net/current/java/base64/): 每次运行此命令时,“结果”始终为空字符串,但我不明白为什么。有任何想法吗? 注意:我不想将png写入磁盘上的文件。 问题答案: 我遵循xehpuk的回答,但是某些

  • /aaaaa/static/img/zhexian.41eafbf5.png 转 这种格式 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAABjCAYAAAGZCG4EAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQA