Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教一下大佬关于图片撤销重做用你们这个库怎么实现? #23

Open
dragonwarrior95 opened this issue Dec 12, 2020 · 4 comments

Comments

@dragonwarrior95
Copy link

1、看了你们这个库的实现原理分析,大致理解是你们这个库应该是快照式撤销重做类库?
2、图片处理涉及到distructive 和 non-destructive操作,还有添加图层类操作,图层与原图一起变换操作等一系列操作,那么用你们这个库怎么实现?或者你们有类似的示例吗?

@doodlewind
Copy link
Contributor

doodlewind commented Dec 12, 2020 via email

@dragonwarrior95
Copy link
Author

你好 1. StateShot 是基于快照(深拷贝)的历史记录库,而不是基于命令(记录操作步骤并回放)的。 2. 对于涉及图片等大体积资源的状态管理,你可以在图片体积较小时,通过 base64 来直接全量存储它。这时建议为相应节点配置规则,从而在图像节点其他轻量字段改变时,避免生成新的大 chunk。你也可以将图像转为 blob,这样只需存储轻量的 URL 式字段即可。但如果应用重度依赖对大体积图像的操作,且在命令之间切换的成本够低(如连续修改滤镜强度,就很容易快速渲染完成),那么基于命令的状态管理会更理想。 发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: dragonwarrior95 <[email protected]> 发送时间: 2020年12月12日 11:14 收件人: gaoding-inc/stateshot <[email protected]> 抄送: Subscribed <[email protected]> 主题: 回复:[gaoding-inc/stateshot] 请教一下大佬关于图片撤销重做用你们这个库怎么实现? (#23) 1、看了你们这个库的实现原理分析,大致理解是你们这个库应该是快照式撤销重做类库? 2、图片处理涉及到distructive 和 non-destructive操作,还有添加图层类操作,图层与原图一起变换操作等一系列操作,那么用你们这个库怎么实现?或者你们有类似的示例吗? — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.

hello大佬
首先感谢大佬回复。
可能是我没把问题描述清楚,我的问题是用StateShot怎么运用于图片处理的撤销重做?
假设图片处理流程如下:
1、图片执行滤镜特效;
2、图片上添加文字图层;
3、移动上一步添加的文字图层;
4、图片上执行裁剪图片功能;
这几个步骤如何用StateShot去串起来?如果这几个步骤每次执行完都转成blob再去存储,小图的话估计还是可以,但是现在手机上出来的图片基本都是五六千的宽高,那么这样大的图片还每次去转blob存储的话速度是否会慢了些?
PS:StateShot是否有图片处理类撤销重做的示例,类似我上述说的处理流程的撤销重做,如果方便的话是否可以出个示例?
再次感谢大佬

@doodlewind
Copy link
Contributor

你描述的这个过程中,似乎并不需要改变原图?这样的话你可以维持原图的 URL 不变,用 StateShot 存储图层位置、裁剪框等业务状态,在状态变更(撤销重做)时重新渲染即可。滤镜特效的渲染显然会比对图片的序列化更高效。

另一种设计是存储每次操作的命令(如修改滤镜强度 +50,向左移动 40px 等),然后回放这些命令。如果你的编辑器更接近 PS(重图像处理)的话,这种方式可能更合适些。

@dragonwarrior95
Copy link
Author

我不太理解你这波所说的改变原图是指改变原图的URL还是改变原图的数据内容?我的理解是滤镜就已经改变原图了,裁剪也是会破坏原图数据的,然后我的编辑器处理的也是比较类似PS,但是PS的撤销重做个人认为不是命令式,毕竟图片处理很多处理方式是不可逆的,另外PS要是处理大图的话,那撤销重做花费的时间代价也比较大,因此命令式撤销重做感觉不太适合PS类编辑器

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants