1

我正在用 HTML5/JavaScript 开发一个图表应用程序。所有绘图都是用SVG完成的,使用 Raphael 或 qooxdoo SVG(尚未确定)。绘图区域应使用自定义背景图像。图像太大而无法下载(几兆字节)对于 2560x1600 Retina 分辨率),这就是我动态构建它的原因,从图块组合它并应用位图效果。为此,我使用HTML5 画布。之后,必须使生成的背景图像可以从 SVG 访问。为了实现这一点,我从画布中导出数据 URI<image xlink:href="data:image/png;base64,..."/> ,并在 SVG 内部使用。

这适用于简单的示例,但我有点担心生产中的内存使用情况。假设图像占用 12MB 内存(2560 * 1600 *3 字节 ber 像素),将使用多少额外内存?我想至少会分配一些兆字节来存储 base64 编码的 PNG 压缩表示作为数据 URI,另外 12 兆字节将用于 SVG<image>元素的缓冲区。

我想知道是否有一种方法可以将其短路并避免冗余的图像编码 - 解码?

4

1 回答 1

1

您可以使用canvas.toBlob(callback)和绕过 base64 部分window.URL.createObjectURL()。除此之外,我认为您没有进一步限制内存使用的地方。

https://developer.mozilla.org/en-US/docs/Web/API/window.URL.createObjectURL

toBlob()方法可以在某些浏览器上进行填充:https ://github.com/blueimp/JavaScript-Canvas-to-Blob

于 2013-07-10T13:29:46.403 回答