How do I get glyph outlines of a letter as bézier paths using JavaScript?

后端 未结 3 627
温柔的废话
温柔的废话 2020-12-05 22:09

I want to retrieve the outline information of font glyphs as bézier paths in HTML5. This would allow me to randomize the outlines:

3条回答
  •  有刺的猬
    2020-12-05 22:43

    Out of necessity I've created my own library called opentype.js. It parses OpenType and TrueType fonts. PostScript and WOFF will be supported in the future.

    Here's how it parses a typeface:

    • Load the .ttf / .otf file using a XMLHttpRequest.
    • Parse the glyf and loca table to extract the letter shapes (glyphs).
    • Parse the cname table which contains the mapping from characters to glyphs.
    • Parse the head and hmtx table to get the metrics, basically the spacing between each letter.

    Then it can create a bézier path:

    • Convert the letters of the text into glyphs.
    • Convert the coordinates of the glyph to quadratic curves.
    • Adjust the spacing using kerning information.

    This results in a path that you can draw using the HTML5 canvas:

    var font = opentype.parseFont(arrayBuffer);
    var path = font.getPath("Hello, World!", {x:0, y:150, fontSize:72});
    path.draw(ctx);
    

    Demo of opentype.js

    The demo website has a live example.

提交回复
热议问题