【问题标题】:HTML to PNG Server Side in Node.jsNode.js 中的 HTML 到 PNG 服务器端
【发布时间】:2014-05-21 23:29:08
【问题描述】:

我正在寻找一个库来获取 PNG,将其放在一些 HTML 旁边,然后将其重新渲染为 PNG。

示例代码:

var renderingTool = require('renderingTool');
var newPng = renderingTool.pngoutBuffer('' +
    '<div style="border-left: 12px solid red">' +
    '<img src="src="data:image/png;base64,iVBORw0KGgoAAA..." />' +
    '</div>'
);

这将采用 PNG 图像,在左侧添加一个红色边框并将其重新渲染为 PNG。

我知道 Phantom.js 和 gm(使用 GraphicsMagick)。我不知道如何用 Phantom 和 GM 做到这一点,即使对于 16px x 16px 图像(每张图像 250 毫秒),它也非常慢。我希望能在 10 毫秒内完成这项工作。

编辑:

注意:我编辑了上面的代码以显示原始图像已经作为缓冲区在内存中(在上面我将其转换为 base64)。

另外,可以给幻影提供 HTML 代码而不是 URL 吗?我看到的所有示例都是带有 URL 的,但提供实际代码会更好。

【问题讨论】:

  • HTML 渲染极其复杂。您不太可能找到简单、快速的解决方案。
  • 您不会(至少不太可能)直接使用 phantomjs 实现 10 毫秒。而phantom-node 会更慢,因为它使用 child_process 和网络 voodoo 来运行 phantomjs。

标签: node.js png rendering phantomjs graphicsmagick


【解决方案1】:

从广义上讲,我很确定 phantomJS 是最好的可用方法。

我希望能在 10 毫秒内完成这项工作。

我认为这是无法实现的,因为 phantomJS 甚至下载远程图像的延迟将超过 10ms 至少 1 个数量级(对于相当快且附近的服务器约为 250ms),而对于 phantomJS 则高达 3 个数量级一个慢/远的服务器。请记住,由于光速,网络请求的延迟时间最短。

如果您只是想添加边框或进行裁剪、旋转、添加文本等更简单的操作,那么 gm 就是您所需要的,这将比 phantomJS 快得多,但您的瓶颈仍然可能是实际下载来自网络的远程图像。如果您已经在服务器的文件系统上本地保存了图像文件,那么只需进行 gm 修改,您就可以达到延迟希望的目标。

【讨论】:

  • 也许我应该澄清一下,我在服务器内存中的原始图像作为缓冲区,我可以将其转换为 base64。因此,访问该图像的时间应该远少于 10 毫秒。我将编辑我的问题。
  • 您的问题越具体,我们就能越完整/准确地回答。只是添加边框是 gm 可以直接做的事情,虽然 node 模块只是外部 gm 子进程的包装器,因此混合会有 child_process 和文件系统延迟。
  • 所以延迟/子进程是我试图通过使用 Phantom 来避免的,Phantom 是一个应该已经在内存中的 Node 模块。但是,正如我所指出的,我不知道如何提供 Phantom HTML 代码而不是 URL。
猜你喜欢
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多