【问题标题】:Write text on existing PNG with Node.js使用 Node.js 在现有 PNG 上编写文本
【发布时间】:2026-01-05 00:55:01
【问题描述】:

我正在尝试创建一个简单的动态徽章 (png) 以嵌入到静态页面中,以告知我的应用程序的状态。

我想使用现有的 PNG 图像并使用 Node.js 在其上写一些文本。
我发现了很多库,但它们都使用 Imagemagick 或 Cairo 作为本机依赖项,​​我想避免在服务器上安装其他任何东西。

然后我找到了 lwip,但我真的不明白如何用它在图像上写文字。我该怎么办?

【问题讨论】:

  • 作为替代方案,您是否考虑将 PNG 包装在 SVG 中并以这种方式添加文本?我的回答 here 展示了这种方法的基础知识。
  • svg 不受旧浏览器支持,所以我认为这不是一个足够的跨浏览器解决方案......
  • 我明白你的意思。那么问题来了,您希望在浏览器支持方面回溯多远?旧浏览器也不支持 PNG...您也可以使用例如将 SVG 渲染回 PNG npmjs.org/package/svg2png
  • 是的,但它比 svg 更受支持
  • 你是对的,当然。

标签: node.js image-processing


【解决方案1】:

您可以使用Jimp。它有一个打印方法:

var Jimp = require("jimp");

var fileName = 'test.png';
var imageCaption = 'Image caption';
var loadedImage;

Jimp.read(fileName)
    .then(function (image) {
        loadedImage = image;
        return Jimp.loadFont(Jimp.FONT_SANS_16_BLACK);
    })
    .then(function (font) {
        loadedImage.print(font, 10, 10, imageCaption)
                   .write(fileName);
    })
    .catch(function (err) {
        console.error(err);
    });

【讨论】:

  • 或者,现在似乎每个人都支持 SVG:caniuse.com/#feat=svg
  • 使用 Jimp,您无法编写任何大小和颜色的文本。
  • @dumitru 你可以。
  • 我对 Jimp 的限制是您必须使用位图图像,并且从 ttf 文件转到 fnt 文件并非易事。
  • @VictorioBerra ,您提到 ttf 到 fnt 文件是不平凡的。好吧,我从昨天开始就在尝试,但一直无法做到。 *.com/questions/24529369/…我正在关注这个链接,但仍然没有帮助。