如何将图像从canvas标签保存到php服务器?

ope*_*guy 4 javascript php ajax html5

我有这样的javascript代码

var testCanvas = document.getElementById('canvas-1');
var canvasData = testCanvas.toDataURL("image/png");
var ajax = new XMLHttpRequest();
ajax.open("POST",'http://www.domain.com/imgsave.php',true);
ajax.setRequestHeader('Content-Type', 'canvas/upload');
ajax.send("canvasData"+canvasData );
Run Code Online (Sandbox Code Playgroud)

我的PHP代码是这样的

if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
    // Get the data
    $imageData=$GLOBALS['HTTP_RAW_POST_DATA'];

    $filteredData=substr($imageData, strpos($imageData, ",")+1);

    $unencodedData=base64_decode($filteredData);
    $fp = fopen( 'test.png', 'wb' );
    fwrite( $fp, $unencodedData);
    fclose( $fp );
        echo "saved";
}
  else{

  echo "no raw data";
  }
Run Code Online (Sandbox Code Playgroud)

执行此代码时,我得到一个零大小的png文件图像?我的代码有问题吗?

Fun*_*k91 6

我最近自己必须这样做.

首先,我将canvasData放入隐藏字段并将其发布到我的PHP页面.

它以这种格式返回: data:image/png;base64,iVBORw0......

您需要首先拆分数据,因为这data:image/png;base64,是标题信息.其余的是编码数据.

$rawData = $_POST['imageData'];
$filteredData = explode(',', $rawData);

$unencoded = base64_decode($filteredData[1]);
Run Code Online (Sandbox Code Playgroud)

然后我在我的服务器上创建图像:

//Create the image 
$fp = fopen('sigs/test1.png', 'w');
fwrite($fp, $unencoded);
fclose($fp); 
Run Code Online (Sandbox Code Playgroud)

然后阅读它以做任何我想要的事情.

$file_name = 'test1.png';
$file_size = strlen($filteredData[1])/1024; //This may be wrong, doesn't seem to break for me though.


$fh = fopen('sigs/test1.png', 'r');
$content = fread($fh, $file_size);
$content = base64_encode($content);
fclose($fh);
Run Code Online (Sandbox Code Playgroud)

我更确定有一个更优雅的解决方案,但这对我有用!

检查这个以获取更多信息(可能):我自己的问题