对于给定的字体和给定的字符串,如何在JavaScript中获取如下图所示的多边形点?
(我知道有关SO的相关问题,但它们适用于Python或其他语言/环境;如果可能,我希望只有JavaScript解决方案)
编辑:跟进@ Roman的答案:
使用typeface.js在线工具,我将TrueType字体转换为typeface.js格式。每个字母的表示方式与此类似:(这里是字母d
的表示)
"d": {
"x_min": 135.640625,
"x_max": 792.171875,
"ha": 928,
"o": "m 135 998 l 330 998 q 792 499 763 933 q 330 0 763 65 l 135 0 l 135 998 m 330 151 q 648 499 635 211 q 330 846 635 786 l 287 846 l 287 151 l 330 151 "
},
用于根据此格式呈现字母的typeface.js代码的关键部分是:
switch(action) {
case 'm':
ctx.moveTo(outline[i++], outline[i++]);
break;
case 'l':
ctx.lineTo(outline[i++], outline[i++]);
break;
case 'q':
var cpx = outline[i++];
var cpy = outline[i++];
ctx.quadraticCurveTo(outline[i++], outline[i++], cpx, cpy);
break;
case 'b':
var x = outline[i++];
var y = outline[i++];
ctx.bezierCurveTo(outline[i++], outline[i++], outline[i++], outline[i++], x, y);
break;
}
答案 0 :(得分:1)
typeface.js已经完成了一些工作,这是一个用“canvas canvas one”替换普通文本的javascript库(所以你可以使用任意字体)。
typeface.js通过使用字体定义数据来实现这一点,该数据基本上保存了每个字形的绘图指令。字形“A”的数据可能如下所示:
m 253 638 l 379 949 q 394 945 387 946 q 409 944 401 944 q 443 949 428 944
q 565 629 525 733 q 673 359 605 526 q 822 0 740 192 q 773 3 804 0 q 736 7
743 7 q 686 4 709 7 q 650 0 664 1 q 588 199 609 137 q 532 355 567 261 l
370 355 l 210 355 l 159 205 q 127 110 142 161 q 99 0 112 59 l 43 6 q 6 3
20 6 q -14 0 -8 0 q 74 211 29 105 q 155 403 119 317 q 253 638 191 490 m
370 422 l 502 422 l 371 760 l 240 422 l 370 422
(我插入了换行符)。
此字符串是一系列绘图操作及其各自的数字参数。例如,“m 253 638”对应于“移动到x:253 y:638”和“l 379 949”对应于“绘制线到x:379 y:949”。等等。
你应该看一下这里的来源: http://bazaar.launchpad.net/~davidchester/typeface.js/trunk/view/head:/js/typeface.js
您可以调整该渲染器以提取您的poligons。这里的主要技巧是让this page为你做艰苦的工作并创建字体定义。