Javascript 多边形指向字母外

Javascript 多边形指向字母外,javascript,fonts,webfonts,Javascript,Fonts,Webfonts,对于给定的字体和字符串,如何用JavaScript获得下图中的多边形点 (我知道这方面的相关问题,但它们是针对Python或其他语言/环境的;如果可能的话,我希望只使用JavaScript解决方案) 编辑:跟进@Roman的答案: 使用typeface.js在线工具,我将TrueType字体转换为typeface.js格式。每个字母的表示方式与此类似:(这里是字母d的表示方式) typeface.js代码中基于此格式呈现字母的关键部分是: switch(action) { case '

对于给定的字体和字符串,如何用JavaScript获得下图中的多边形点

(我知道这方面的相关问题,但它们是针对Python或其他语言/环境的;如果可能的话,我希望只使用JavaScript解决方案)

编辑:跟进@Roman的答案:

使用typeface.js在线工具,我将TrueType字体转换为typeface.js格式。每个字母的表示方式与此类似:(这里是字母
d
的表示方式)

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;
}

已经为一个javascript库做了一些工作,该库将常规文本替换为“画布渲染文本”(因此可以使用任意字体)

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的线”。等等等等

您应该在此处查看源代码:


您可以调整渲染器以提取poligon。这里的主要技巧是让我们为您做艰苦的工作,并创建字体定义

您可能需要写入画布,然后根据画布的像素,使用某种算法(您可以借用另一种语言)进行计算。我将一种感兴趣的字体转换为typeface.js格式。让我们看看typeface.js如何绘制字母。。。
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