node-canvas:使用自定义字体

时间:2015-09-11 10:57:35

标签: node.js node-canvas

我想知道如何在node-canvas中使用自定义字体。

这是我的尝试,但到目前为止无效:

var Canvas = require('canvas')
    , Image = Canvas.Image
    , Font = Canvas.Font
    , path = require('path');

var gubblebum = new Font('gubblebum', fontFile('GUBBLO___.ttf'));

function fontFile(name) {
  return path.join(__dirname, '../fonts', name);
}

function draw() {
  var canvas = new Canvas(100, 100)
    , ctx = canvas.getContext('2d');

  ctx.addFont(gubblebum);
  ctx.font = 'bold 40 gubblebum';
  ctx.fillText('test', 25, 45);

  return canvas;
}

module.exports = draw;

在浏览器中渲染时,字体与默认字体以及大小保持不变。

正确加载了字体文件。否则,将抛出异常。

有趣的是,当我做ctx.font =' bold 40 someGibberish&#39 ;;字体大小正确应用。

2 个答案:

答案 0 :(得分:1)

所以我最终得到了节点画布来使用自定义字体。

首先我使用了旧版的开罗。我使用Brew来安装所有的依赖项,因为它告诉我我有哪些以及哪些正确链接,然后一旦所有依赖项都正常工作,我从Brew卸载了Cairo版本并安装了1.12.X版本(补丁我认为是开罗的第18版。这解决了Mac OSX问题的字体大小,但我无法加载字体。

因此经过一些调查后我发现最新的Node Canvas模块也存在问题,所以我在我的package.json中将版本硬设置为1.1.0,最后我得到了自定义字体来正确加载和调整大小。

所以TL; DR :使用Cairo版本1.12.X和Node Canvas 1.1.0,它应该可以工作吗?我花了一段时间才开始工作。

答案 1 :(得分:0)

现在应该在node-canvas 2.0中使用“Just Work”(目前处于alpha但相对稳定)。请参阅新的Canvas.registerFont方法:https://github.com/Automattic/node-canvas/#registerfont-for-bundled-fonts