在 Node.JS 上进行服务器端图像处理应该使用哪个库?

123

我在Node.JS维基上找到了可用库的相当大列表,但我不确定哪些更成熟并且提供更好的性能。基本上我想要做以下事情:

  1. 从外部源加载一些图像到服务器
  2. 将它们放在一个大画布上
  3. 稍微裁剪和遮罩它们
  4. 应用一个或两个过滤器
  5. 调整最终图像的大小并提供链接

如果节点包适用于Linux Windows,则更好。


问题已经在这里得到了回答:https://dev59.com/I2855IYBdhLWcg3wGQNM - DjebbZ
2
2015年:这个也看起来很正常:https://github.com/oliver-moran/jimp - jmunsch
@jm_____ stackoverflow既是一个问答平台,也是一个维基百科。请随意编辑答案,以便更多人注意到它。 - Andrei Андрей Листочкин
3个回答

196

回答自己的问题

我花了两天时间研究Node.js图形库。

node-canvas

  • 由于我非常熟悉<canvas> API,所以我首先尝试了它。这是一个库的重大优势。
  • 它需要Cairo,但在Windows上没有轻松的下载方式。尽管如此,我还是在GTK+发行版中找到了它。
  • 此外,它需要编译模块安装时的本地库绑定代码。它使用的Node-Waf尚未被移植到Windows。

gm

  • 成熟
  • 在Windows上运行顺畅
  • 文档还可以,但不够详尽:我不得不查看源代码才能弄清楚哪些API可用
  • 不幸的是,gm没有简单的方法来合并图像。也许有某种方法可以实现,但我花了两个小时的时间仍然没有找到。

node-imagemagick

  • 官方仓库只涵盖了一些基本的ImageMagick命令,但我使用了这个分支(好在NPM可以直接从Git仓库获取库)。它具有montage的绑定,正好满足我的需求。
  • 虽然ImageMagick相当慢,但它在Windows上工作。

Node-Vips

  • 巨大优势:它使用了一个令人难以置信的VIPS库,我对其非常熟悉。VIPS非常快速并且针对大型图像进行了优化。它非常聪明地利用硬件资源:如果您的计算机具有大量RAM,则会在内存中进行所有处理,但如果内存稀缺或需要用于其他应用程序,则会切换到硬盘高速缓存。
  • 与node-canvas相同,它需要使用Node-Waf,因此尚不支持Windows。

我还看了列表中的其他库,但其中大部分都不成熟或不适合我的使用情况。当Node-Waf被移植到Windows后,我真的想尝试迁移到Node-Canvas或Node-Vips,但在那之前,我将坚持使用node-imagemagick。


50
感谢您回来回答自己的问题。写得非常好! - mpen
1
Node-waf已经被node-gyp取代,因此根据https://github.com/LearnBoost/node-canvas/wiki/Installation---Windows的说明,在Windows上安装node-canvas应该是可行的。 - Florian Ledermann
12
时间已经改变了,NODE-Vips已经一年多没有更新了。我建议将Sharp添加到列表中。它也使用VIPS并且正在积极维护:https://github.com/lovell/sharp - Simon Fakir
6
对于最近接触此问题的人,LWIP 是另一个不错的选择。它没有外部依赖项,依赖于一个node.js的C++插件。 - MaxArt
2
https://github.com/lovell/sharp 是另一个针对libvips的Node.js绑定,现在可以在Windows上使用。 - jcupitt
显示剩余7条评论

6

我强烈建议您使用gm和GraphicsMagick进行检查,这是与Windows和Linux/MacOS/BSD等操作系统兼容的稳定且功能丰富的图形处理工具,API清晰易懂,文档详尽,速度快。


3
这是一个基于GDI+的canvas实现,链接在这里。

1
我无法使这个东西运行起来。一旦我要求它,就会立即出现“%1不是有效的Win32应用程序”。 - mpen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接