解码画布todataURL

joe*_*oel 5 javascript php canvas

我在使用canvas的todataurl()方法创建的数据时遇到了困难.目前我的代码将结果数据发送到我的php服务器,该服务器使用file_put_contents()方法创建一个文件来存储该数据.现在,如果我将文件中产生的乱码剪切并粘贴到图像标签src中,它可以正常工作并正确显示,所以我假设到目前为止一切都很好.

但是当我尝试在JS中使用代码时,我一直遇到问题.我已经尝试过php的base64_decode方法,但不断收到破坏的文件.我找到了这段代码:

<?php
  $encodedData = str_replace(' ','+',$encodedData);
  $decocedData = base64_decode($encodedData);
Run Code Online (Sandbox Code Playgroud)

并且仍然有被破坏的文件.理想情况下,我想用它创建一个.png文件,但我决定只在JS中再次处理数据文件.任何帮助非常感谢.

ste*_*ewe 13

看来你必须摆脱toDataURL()函数前面的图像数据头.在客户端,您可以像这样剥离标题:

..
var data=canvas.toDataURL();
var output=data.replace(/^data:image\/(png|jpg);base64,/, "");
// now send "output" to the server
..
Run Code Online (Sandbox Code Playgroud)

在服务器端使用此:

<?php
    $decocedData = base64_decode($encodedData);
?>
Run Code Online (Sandbox Code Playgroud)

  • 这很有帮助,如果有人在将来需要做同样的话,我最终会做的就是:$ backGround = substr($ backGround,22); $ backGround = str_replace('','+',$ backGround); $ backGround = base64_decode($ backGround); file_put_contents("currentBG1.png",$ backGround); (3认同)