通过jquery上传toDataUrl图像

时间:2013-03-08 10:19:30

标签: php jquery canvas kineticjs

我正在尝试用我的画布创建一个图像,但是经过一些尝试后我似乎无法在后端获得有效的上传PNG。有人可以看看这里发生了什么吗?

我的javascript:

    stage.toDataURL({
    callback: function(dataUrl) {
        var imgURL = dataUrl; // keep the entire url
        $.ajax({
            type: "POST",
            url: "http://www.xxxx.nl/pointer/upload.php", 
            data: ({imgData : imgURL}),
            cache: false,
            success: function(result){
                //window.open(dataUrl); // Show result stage in a new window
                alert(result); // show php error if exists
            }
        });
    }
});

我现在非常基本的.php:

$im = imagecreatefrompng($_POST['imgData']);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

我的错误日志:

[Fri Mar 08 11:29:16 2013] [error] [client 24.132.214.139] mod_security: Access denied with code 500. Error reading request body, error code 70007: The timeout specified has expired [hostname "www.ccc.nl"] [uri "/pointer/upload.php"] 

1 个答案:

答案 0 :(得分:1)

执行此操作时:

var canvasData = myCanvas.toDataURL("image/png");

你得到代表.png的base64编码字符串,如下所示:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAGB………

请注意,此字符串以此标头为前缀:data:image / png; base64。这个标题是.png文件不需要/不识别的 - 并且会使imagecreatefrompng()犯规。因此,在保存此字符串以创建.png时,必须剥离标题。在php方面你可以这样做(虽然你可以在客户端剥离它):

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

然后继续正常......