mapbox/node-fontnik字体转换工具的使用

  • 平台:
    ubuntu

1.部署安装

https://github.com/mapbox/node-fontnik

1.1克隆源代码

git clone https://github.com/mapbox/node-fontnik.git

1.2编译安装

npm install

1.3测试是否成功

npm test

2.源码

2.1转换一个字体的pbf文件

var fontnik = require('.');
var fs = require('fs');
var path = require('path');

var convert = function (fileName, outputDir) {
	var font = fs.readFileSync(path.resolve(__dirname + "/" + fileName));
	output2pbf(font, 0, 255, outputDir);
}

function output2pbf(font, start, end, outputDir) {
	if (start > 65535) {
		console.log("done!");
		return;
	}
	fontnik.range({ font: font, start: start, end: end }, function (err, res) {
		var outputFilePath = path.resolve(__dirname + "/" + outputDir + start + "-" + end + ".pbf");
		fs.writeFile(outputFilePath, res, function (err) {
			if (err) {
				console.error(err);
			} else {
				output2pbf(font, end + 1, end + 1 + 255, outputDir);
			}
		});
	});
}
convert("./font/OpenSans-SemiBold.ttf", "./my_pbf/");

注意:
只需更改convert中的两个文件地址即可。

2.2转换为两个字体的合并pbf文件

var fontnik = require('.');
var fs = require('fs');

// 读取第一个 PBF 文件
var pbf1 = fs.readFileSync('./merge_pbf/open.pbf');

// 读取第二个 PBF 文件
var pbf2 = fs.readFileSync('./merge_pbf/1.pbf');

// 将 PBF 缓冲区作为数组传递给 composite 函数
fontnik.composite([pbf1, pbf2], function(err, res) {
  if (err) {
    console.error(err);
  } else {
    // 将合成的 PBF 结果写入文件
    fs.writeFileSync('./merge_pbf/combined.pbf', res);
    console.log('合并完成!');
  }
});

2.3另一种写法

https://juejin.cn/post/6867352613961728008#comment

3.执行程序

node js文件
注意:
js文件放在node-fontnik文件夹下

4.注意事项

4.1命名规范

如果你的代码中为"glyphs": "./glyphs/test/{fontstack}/{range}.pbf",,
则命令需要是范围如0-255.pbf
在这里插入图片描述

4.2打印结果

"done!"是当所有的字符范围已经被处理并转换为.pbf格式后打印的信息。它表示整个转换过程已经完成。

在output2pbf函数中,start和end参数定义了要转换的字符范围。如果start值大于65535(这是Unicode字符的最大值),那么函数将打印"done!"并返回,表示转换完成。

然后,这个函数使用fontnik.range将每个字符范围(从start到end)的字体数据转换为.pbf格式。如果这个过程中没有错误,它将继续调用output2pbf函数处理下一个字符范围。

所以,当你看到"done!"时,这表示所有字符范围的字体数据都已经被成功转换为.pbf格式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值