我应该使用哪个库在 Node.JS 上进行服务器端图像操作? [已关闭]

问题描述 投票:0回答:3

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

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

如果节点包可以在 Linux 和 Windows 上运行,那将是一大优势。

javascript image node.js image-processing image-manipulation
3个回答
198
投票

回答我自己的问题

我花了两天时间挖掘 Node.js 图形库。

节点画布

  • 我先尝试了一下,因为我对
    <canvas>
    API 非常熟悉。这对于图书馆来说是一个巨大的优势。
  • 它需要开罗,而开罗没有简单的 Windows 下载。我在 GTK+ 发行版中找到了它。
  • 此外,它需要在模块安装时编译本机库绑定代码。它使用尚未移植到 Windows 的 Node-Waf。

gm

  • 成熟
  • 在Windows上流畅运行
  • 文档ok但不彻底:我必须查找源代码才能找出可用的API
  • 不幸的是,没有简单的方法将图像与 gm 结合起来。也许有某种方法可以实现这一目标,但我在花了两个小时后还没有找到一个。

node-imagemagick

  • 官方存储库几乎没有涵盖基本的 ImageMagick 命令,但我使用了 this fork (好消息是 NPM 可以直接从 git 存储库中提取库)。它具有
    montage
    的绑定,这正是我所需要的。
  • ImageMagick 相当慢,尽管它可以在 Windows 上运行。

节点 Vips

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

锋利

  • 也基于 VIPS。截至 2024 年积极维护。将输入缓冲区转换为 320x240 和 PNG 格式并获取输出缓冲区的示例用法:

    const sharp = require('sharp');
    const outBuf = await sharp(inBuf).resize(320, 240).png().toBuffer()
    

我还查看了列表中的其他库,但大多数库要么非常不成熟,要么不适合我的用例。当 Node-Waf 移植到 Windows 时,我真的很想尝试迁移到 Node-Canvas 或 Node-Vips,但在那之前我会坚持使用 node-imagemagick。


6
投票

我强烈建议您使用 GraphicsMagick 检查 gm。 稳定、功能丰富、API 简洁、文档丰富且速度快。

它可以在 Windows 和 Linux / MacOS / BSD / ... 上运行


3
投票

她是基于 GDI+ 的画布实现的 link

© www.soinside.com 2019 - 2024. All rights reserved.