【问题标题】:Most efficient way to reuse an HTML5 canvas's drawn content重用 HTML5 画布绘图内容的最有效方法
【发布时间】:2015-10-21 12:06:30
【问题描述】:

我使用屏幕外canvas 根据某些变量的运行时值动态生成某些图像。在屏幕外画布上绘制图像后,我想获取它并在我的 web 应用程序的几个地方使用它。

策略 1: 使用屏幕外画布的 toDataURL() 方法获取包含图像的 data: URI,我可以通过编程方式将其设置在页面中的多个 img 元素上应该显示它。

策略2:使用离屏画布的getImageData()方法获取ImageData实例。将img 元素替换为canvas 元素并在它们上调用putImageData()

哪种策略在内存方面更有效?哪个更“惯用”?我试图避免重复保存显示图像实例所需的内存。其他建议?

【问题讨论】:

  • “在我的 webapp 的多个地方使用它”是指同一网页上的多个地方还是跨帖子?
  • 在同一页面中(无论如何它是一个 SPA)。

标签: canvas data-uri getimagedata off-screen putimagedata


【解决方案1】:

使用画布元素代替 img 元素。

然后将内存中的画布绘制到屏幕画布上。一个canvas元素可以使用另一个canvas作为drawImage源:

context.drawImage(inMemoryCanvasElementReference,0,0);

顺便说一句,imageData 命令(.getImageData.putImageData)的内存效率非常低,因为它们构建了一个全新的像素数据数组。它们还缺乏性能,因为它们不是 GPU 加速的。

【讨论】:

  • 非常感谢。这很好用。我只需要解决 Retina 显示器和 devicePixelRatios 的问题……
猜你喜欢
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2014-08-20
  • 1970-01-01
  • 2014-07-24
相关资源
最近更新 更多