如何将HTML <canvas>数据发送到服务器</canvas>

时间:2012-02-28 08:33:06

标签: javascript ajax html5 file-upload canvas

似乎有两种方法可以将<canvas>数据发送到服务器。一种是使用canvas.getImageData()来获取像素数组及其8位颜色值。另一种方法是使用canvas.toDataURL())发送文件附件。此方法为demonstrated here

我想建立一个人们可以保存画布图纸的网站。哪种方法对我的用户来说更具可扩展性和更快性?

3 个答案:

答案 0 :(得分:4)

打开您的选项:使用fabric.js,您可以将fabric.js画布序列化为JSON。

它不仅提供了额外的编辑功能层,还允许您执行以下操作(更不用说能够在以后编辑图像):

var canvas = new fabric.Canvas('c');
canvas.add(
    new fabric.Rect({ top: 100, left: 100, width: 50, height: 50, fill: '#f55' }),
    new fabric.Circle({ top: 140, left: 230, radius: 75, fill: 'green' }),
    new fabric.Triangle({ top: 300, left: 210, width: 100, height: 100, fill: 'blue' })
);

现在,当您要序列化此画布时,只需调用结构画布对象上的JSON.stringify函数;

JSON.stringify(canvas);

在上面的示例中,您可以使用以下内容:

{
    "objects": [
        {
            "type": "rect",
            "left": 100,
            "top": 100,
            "width": 50,
            "height": 50,
            "fill": "#f55",
            "overlayFill": null,
            "stroke": null,
            "strokeWidth": 1,
            "scaleX": 1,
            "scaleY": 1,
            "angle": 0,
            "flipX": false,
            "flipY": false,
            "opacity": 1,
            "selectable": true
        },
        ...
    ]
}

使用以下命令将画布序列化回其状态:

var canvas = new fabric.Canvas('c');
canvas.loadFromJSON(yourJSONString);

一些其他资源:

Kitchen Sink Demo - 查看fabric.js的功能(包括免费绘图;之后修改免费绘图的大小和位置)

Homepage

答案 1 :(得分:3)

你可以.toDataURL()

var datastring = document.getElementById('mycanvas').toDataURL("image/png"));

或使用jQuery

var datastring = $('#mycanvas')[0].toDataURL("image/png");

然后通过XHR将该字符串发送到服务器,这应该是最快的。

答案 2 :(得分:3)

尝试这个在同样的情况下适用于我: -

获取整个画布的json数据使用JSON.stringify(canvas);

并从json再次加载使用以下代码: -

canvas.clear();
canvas.loadFromJSON(json_string,canvas.renderAll.bind(canvas));