如何将 HTML5 canvas 上下文重置为默认值?

How to reset an HTML5 canvas context to default values?

我知道如果我从头开始 canvas,我可以在任何更改之前使用 context.save(),然后使用 context.restore() 来恢复它。我的问题是:如果我得到一个已经修改过的 canvas,在我什至可以使用 context.save() 命令之前,我如何才能将整个上下文重置为默认值?

这很不幸,但实际上你不能完美地做到这一点,因为剪辑 API 被打破了...

所有其他属性都可以设置为一些绝对值:显而易见的 fill/strokeStylefontshadowXXX 等。甚至转换矩阵也可以绝对设置为单位矩阵resetTransform()setTransform(1,0,0,1,0,0).
我们不能绝对设置的一件事是裁剪区域。对于这个,你必须有一个初始的 save(),(或者安装 my setClip polyfill)。
不幸的是,尽管它已被多次要求,但一些实施者确实反对在规范中包含 setClip()...

因此,无需初始调用 save() 即可完全重置上下文的唯一方法是重置 <canvas> 元素的 widthheight 属性。但是这样做你也会清除上下文中的任何当前绘图,并且你会终止你的应用程序的内存使用:至少在 Chrome 中,当你这样做时会分配一个新的绘图缓冲区,这意味着 GC 必须启动以收集先前的缓冲区,该缓冲区可能具有大画布的相应大小。将来我们应该能够调用一个 reset() 方法来避免这个 realloc 问题,但它仍然会清除绘图缓冲区。