Canvas 画布剪辑保存和恢复
我们有一个使用5个剪辑区域的画布(用于前视图和后视图)。 我们需要在会话中保存整个画布,并在用户导航回页面时将其还原。 到目前为止,我们还没有找到一种方法来保存和恢复剪辑的状态。Canvas 画布剪辑保存和恢复,canvas,save,restore,clip,Canvas,Save,Restore,Clip,我们有一个使用5个剪辑区域的画布(用于前视图和后视图)。 我们需要在会话中保存整个画布,并在用户导航回页面时将其还原。 到目前为止,我们还没有找到一种方法来保存和恢复剪辑的状态。 期待输入。以下是如何在html画布上保存和恢复剪辑区域的概述。 从这个提纲开始,如果你遇到编码问题,就发布一个新的问题 Html画布剪辑包括: 执行定义剪裁路径的路径命令 使用context.clip() 如果需要多个剪辑,则必须将每个剪辑包装在上下文。保存和上下文。还原对中 可能用于创建剪辑的变换相关命令有:sav
期待输入。以下是如何在html画布上保存和恢复剪辑区域的概述。 从这个提纲开始,如果你遇到编码问题,就发布一个新的问题 Html画布剪辑包括:
- 执行定义剪裁路径的路径命令
- 使用
context.clip()
- 如果需要多个剪辑,则必须将每个剪辑包装在
上下文。保存
和
上下文。还原
对中
- 可能用于创建剪辑的变换相关命令有:
save、setTransform、transform、translate、rotate、scale、restore
- 可用于创建剪辑的路径绘制命令有:
beginPath、moveTo、arc、quadraticCurveTo、bezierCurveTo、lineTo、rect、arcTo、closePath
- 导致剪切的命令是:
clip
- 发出创建剪切路径的原始命令(带参数)
- 以可以序列化和存储的格式保存这些命令(和参数)
- 由您决定使用哪种格式来存储命令。JSON是用于保存javascript数组(如命令和参数)的常用格式。您可以使用
创建一个简单的脚本,将javascript数组和对象转换为字符串JSON.stringify
- 由您决定将序列化命令存储在何处。存储序列化命令的常见位置有:数据库、本地存储、会话状态等
- 稍后,当用户导航回页面时,必须获取保存的JSON并使用
对命令(和参数)进行“再水化”JSON.parse
- 执行保存的剪辑路径命令(和参数)并调用
,以重新创建与原来相同的剪辑context.clip()
PathObject
“类”。
这个新的PathObject
类应该能够:
- 接受并存储所有原始剪切路径命令(和参数)
- 在上下文中播放(重新执行)存储的剪辑命令
for(var i=0;i<commands.length;i++){
context[commands[i]].apply(context, args[i]);
}
- 命令[],参数[],每个顺序配对的命令和参数都是创建剪切路径的单个步骤(请参见上文,了解必须记录哪些与路径相关的命令)
- 与每个path命令相对应的
方法(函数)。每个函数只接受与该命令相关的参数,并对每个接受的参数执行PathObject
和命令。push
参数。push
// when myPathObject.moveTo(x,y) is called... // store moveTo in the commands array commands.push('moveTo'); // store x,y (as an array) into the arguments array arguments.push([x,y]);
- 在上下文上执行所有存储路径命令的方法
for(var i=0;i<commands.length;i++){ context[commands[i]].apply(context, args[i]); }
- 使用
var commandsAndArgs={ commands:commands, args:args } return(JSON.stringify(commandsAndArgs));
var j=JSON.parse(json); this.commands=j.commands; this.args=j.args;