Canvas globalCompositeOperation无法正常工作

时间:2013-08-09 15:38:16

标签: canvas alpha blend composite globalcompositeoperation

我已将此演示从MDN https://developer.mozilla.org/samples/canvas-tutorial/6_1_canvas_composite.html放入jsFiddle并使颜色变为50%透明。 http://jsfiddle.net/eGAvb/

现在,根据Apple的说法,source-in应该“在源图像和目标图像都不透明的地方显示源图像。在源和目标都是半透明的任何地方显示混合。无论在哪里显示透明度来源或目的地是透明的。“

因此,当您查看它的显示方式时,您会发现问题。它是一种非常浅的粉红色,根本不是紫色。请问有人可以解释为什么广场上没有任何蓝色混合在这里?为什么它实际上变轻了?

此外: 我实际上已经注意到了一个更明显的例子。根据官方规范:“源图像和目标图像的独占OR”,xor显然呈现紫色,它应该什么都不显示!它没有提到不透明度会影响这些规则。

1 个答案:

答案 0 :(得分:2)

它的工作原理与你的例子完全一致。看一下直接来自 the spec

的内容
  

源图像A是要渲染的形状或图像,目标图像B是位图的当前状态。

     

在源图像和目标图像都不透明的任何地方显示源图像。在其他地方显示透明度。

在该定义中将显示源图像。由于它绘制目标图像然后减去源图像,因此您可以获得更轻的整体图像。

另一个示例是source-over,您可以期望将透明胶片添加到彼此,同样使用destination-insource-in,由于形状的减去,透明度应该降低

感谢@simonsarris找到这个宝石The Porter Duff Compositing Operators