首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将HTML <canvas>数据发送到服务器

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

Stack Overflow用户
提问于 2012-02-28 16:33:06
回答 3查看 8.4K关注 0票数 5

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

我想建立一个网站,人们可以保存他们的画布绘图。对于我的用户来说,哪种方法更具伸缩性和更快?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-28 17:14:10

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

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

代码语言:javascript
复制
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' })
);

现在,当您想序列化此画布时,只需调用fabric canvas对象上的JSON.stringify函数即可;

JSON.stringify(canvas);

这为我们上面的示例提供了类似于以下内容:

代码语言:javascript
复制
{
    "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
        },
        ...
    ]
}

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

代码语言:javascript
复制
var canvas = new fabric.Canvas('c');
canvas.loadFromJSON(yourJSONString);

其他一些资源:

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

Homepage

票数 5
EN

Stack Overflow用户

发布于 2012-02-28 16:56:48

你可以.toDataURL()

代码语言:javascript
复制
var datastring = document.getElementById('mycanvas').toDataURL("image/png"));

或使用jQuery

代码语言:javascript
复制
var datastring = $('#mycanvas')[0].toDataURL("image/png");

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

票数 4
EN

Stack Overflow用户

发布于 2013-11-21 19:52:30

试试这个,它在相同的情况下也适用于我:

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

并使用下面的代码从json重新加载:

代码语言:javascript
复制
canvas.clear();
canvas.loadFromJSON(json_string,canvas.renderAll.bind(canvas));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9478659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档