2011-06-14 144 views
1

我有一个很大的源图像,我想在圆圈内部显示一小部分,并将圆圈外的部分画布留在圆圈外面。HTML5 globalCompositeOperation vs clip

Mozilla guide to Compositing with HTML5涵盖两个主题:globalCompositeOperationclip。它看起来像这些会让我做我想做的事情,所以我想知道每个的缺点是什么,我应该使用哪些。

我可以设置globalCompositeOperationsource-atop(或source-in,但是seems buggy in WebKit)。然后让目标画布变成透明的黑色圆圈,然后简单地画出源图像。这将确保只有圆圈部分将被填充。

或者,我可以绘制一个圆形路径并使用clip来定义一个裁剪区域,然后在其上绘制源图像,这也应该确保只有圆形部分将被填充(事实上,Mozilla的上面的页面甚至有一个例子可以用星星来做很多事情)。

  1. 这两种技术是否会像我说的那样工作,或者我错过了什么?
  2. 如果是这样,那么这两种技术中的任何一种都会有什么重大的变化,使得它们明显比另一种更好?
  3. 如果不是,哪一个总体表现更好?

我会(纯属推测)想像globalCompositeOperation将有更好的表现,因为它是应用在每个像素级别的操作,而clip操作需要做的多边形交集。但这只是一种预感。

回答

6

截止到3月份,globalCompositeOperation在所有浏览器上都不起作用。

剪辑确实...除了反锯齿,实际上,这是每个浏览器可悲的不同。

在我看来,这里做适当的事情是使用剪辑。使用source-atop可能适用于您非常特定的情况,但它不像您描述的那样具有很强的可扩展性。如果你想改变它,就像说你的圈子背后有一个背景,如果你用globalComposite的方式来做,你会遇到麻烦。

测试结果如下:在我测试过的每个浏览器中剪辑速度更快,并且在Firefox中大幅加快。看结果还是自己试试here

+0

非常好。谢谢(为jsperf基准测试+1)。我想我误解了剪辑 - 我不认为它正在做多边形测试;它正在构建一个每像素映射哪些像素要在绘图时忽略,所以它会更快。请注意,我打算在圆圈背后有一个背景,然后在另一个画布上绘制它,但那会更慢。所以我会去剪辑。谢谢! – mgiuca 2011-06-15 07:12:08