2009-12-08 73 views

回答

59

小更新,因为这个问题是现在半年多岁:

在铬/铬6,你现在可以发送一个画布的图象 - 反对一个网络工作者,让网络工作者进行更改对象,然后使用putImageData(..)将其写回画布。

谷歌的Chromabrush确实是这样,源代码可以在这里找到:

更新:的

最新开发快照Opera(10.70)和Firefox(4.0b1)也支持传递ImageDa ta对象到web工作者。

更新2017年:

从GitHub实际链接(更容易地找到所需的文件从Chromabrush):

+1

让我猜IE是不同的? – Lothar 2015-03-25 08:50:20

4

的postMessage的规范是几个月更新回允许您发布的ImageData对象,但至今没有人实施该行为(我们都到那里)。 canvas本身的问题在于它是一个DOM元素,因此不适用于工作者(没有DOM)。

这是最近在whatwg或web-apps邮件列表中提出的,所以我怀疑我们会开始考虑是否可以在工作者中提供CanvasRenderingContext2D-like api。

+0

我的印象中WebWorker下将不允许与DOM进行任何交互,因为这可能会遇到可能的概率如果多个网络工作人员正在进行更改,那么就要付出代价 – 2009-12-08 06:04:42

+3

问题是DOM没有并发的概念,所以Worker不允许任何共享状态。与工作人员沟通的唯一方式是使用postMessage,并根据“内部结构化克隆算法”执行克隆,该算法基本上可以认为是JSON,但是对于一些关键类型(File,FileList,ImageData, Blob,Date和RegExp) – olliej 2009-12-08 19:10:16

+3

这个答案已过时。另一个答案现在更好。 – Baxissimo 2011-05-14 01:18:07