Canvas globalCompositeOperation模式应该来自drawImage吗?

时间:2011-03-22 23:17:36

标签: javascript canvas

我使用globalCompositeOperation ='copy'然后使用drawImage,以便我的新图像替换下面的图像。

这适用于Mac和Windows以及iPad上的最新Safari和Chrome浏览器。

它在IE 9中不起作用,虽然它在Firefox 3.6中有效,但它在Firefox 4.0中不起作用。

当它不工作时似乎发生的是整个画布被擦除,而不仅仅是我传递给drawImage的矩形区域。

我认为这是IE 9和firefox 4.0中的一个错误,但我不应该期望它能够正常工作吗?

2 个答案:

答案 0 :(得分:1)

这些是Mozilla假设Canvas应该起作用的图像

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Compositing#globalCompositeOperation

问题在于规范在这里写得相当模糊。例如,对于复制复合类型,它显示为:

Display the source image instead of the destination image.

可以将其视为源代码的同义词,或者可以理解为“清除整个画布然后将新的绘图操作复制到画布上”

要了解不同浏览器的实现方式有何不同,请使用上面mozilla提供的图像,以及Mozilla提供的所有不同复合形状的实时触发(不是图像,画布):

https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html

快速浏览一下,Chrome 11似乎不同意Firefox 4在源内,源外,目的地,目的地顶部,深色和复制方面的不同。

一目了然,值得注意的是,所有差异都与是否应该清除不相关的像素有关。 Mozilla似乎这么认为,Google没有。

答案 1 :(得分:1)

当您使用带有globalCompositeOperation =“copy”的drawImage()时,意外的是在目标矩形之外清除画布。但这似乎是如何解释标准的共识。即使使用fillRect()或绘制线条,也会清除整个画布。您必须设置剪裁区域以防止这种情况。

有关讨论,请参阅:https://bugzilla.mozilla.org/show_bug.cgi?id=366283