序列化JavaScript CanvasRenderingContext2D状态数组
Serialising a JavaScript CanvasRenderingContext2D states array
我试图序列化画布的状态保存到数据库,可以在以后的时间恢复。我想把数据保存为一个对象而不是一个位图文件
我对上下文对象的理解.save()
和.restore()
将操纵当前堆栈,尽管有可能序列化堆栈本身吗?我找不到任何方法直接访问接口CanvasRenderingContext2D
API上的堆栈
任何帮助或建议将不胜感激
保存/恢复是后进先出堆栈。它只保存状态,不保存内容或路径。
无法检索堆栈本身。在.restore()
上,当我们在堆栈的底部时,被静默地忽略。
它不保存任何图像数据,路径等。因此,即使您可以检索整个堆栈,也不能使用它来重新创建绘图。你得到的结果是:
stack[0] { fillStyle : #000000, textAlign: start, ... }
stack[1] { fillStyle : #aabb33, textAlign: middle, ... }
stack[2] { ... }
您可以保存的是图像数据。例如:
- toDataURL(),
canvas.toDataURL('image/png');
- toBlob () *
注意toBlob()广泛不被支持。
也可以使用getImageData()如果想要原始的RGB位。
也看看例如 createImageData () , putImageData () , drawImage () 。
对于堆栈:
可以在画布外检索和保存的属性是fillStyle和font等属性。
如果我们转储上下文对象,我们得到,例如在Chrome:
canvas : [object HTMLCanvasElement]
arc : function arc() { [native code] }
... : function ...
#--- Webkit specific:
currentPath : {} # Empty even with path.
webkitBackingStorePixelRatio : 1
webkitImageSmoothingEnabled : true
#--- Attributes part of save() / restore():
fillStyle : #000000
font : 10px sans-serif
globalAlpha : 1
globalCompositeOperation : source-over
imageSmoothingEnabled : true
lineCap : butt
lineDashOffset : 0
lineJoin : miter
lineWidth : 1
miterLimit : 10
shadowBlur : 0
shadowColor : rgba(0, 0, 0, 0)
shadowOffsetX : 0
shadowOffsetY : 0
strokeStyle : #000000
textAlign : start
textBaseline : alphabetic
这些属性可以通过直接指定来检索,或者在循环中执行for并检查的类型来检索。但是,当从文件或数据库中检索时,这些信息的使用将受到相当限制。
还会错过变换矩阵、裁剪区域等
相关文章:
- 从组件状态的数组中删除元素
- 如何在React中更改处于状态的数组
- ReactJS-这个状态中的数组在删除时被正确更新,但结果是't,直到以后的状态发生变化
- 从数组中删除元素,然后保留其状态以备将来使用,而不使用全局变量
- 如何使用Handlebars.js按状态拆分对象数组
- 如何从状态数组中删除项目
- React-Redux:当连接到处于状态的数组时无限循环
- 在 ReactJs 状态上将项目添加到数组中,并超时以进行自我删除
- 从 0 和 1 的数组恢复复选框的状态
- 如何推送到实际对象的数组最后状态,清除它并像新对象一样单独编辑
- 反应 redux 与给定数组的合并状态
- 将状态的数组长度设置为 0,但绑定列表仍剩下一个元素
- 在闭包中公开数组的状态,而不允许从外部对其进行编辑
- ReactJs-如何更新数组中的状态
- $_POST 变量保持活动状态多长时间,PHP 如何决定 post 数组中的内容
- Reactjs-对处于状态的对象数组进行排序
- 如何引用Angular Service返回的数组,以便维护状态
- 使用单例模式维护整个应用中的数组状态
- 清除Redux中的数组状态
- 如何在Node模块之间共享数组状态