The code must load the font file, how to embed it into the built binary

WBOY
Release: 2024-02-09 17:27:08
forward
437 people have browsed it

The code must load the font file, how to embed it into the built binary

In PHP development, loading font files is a common requirement. However, to ensure the availability and convenience of the font files, we might consider embedding the font files into the built binary. In this way, we no longer need to rely on external font files, but use embedded fonts directly in the code. So, how to embed font files? This article will give you detailed answers.

Question content

I have this code in my go package. It must load the cmr10.ttf font file. Therefore, the font files must be located next to every executable file that uses this package.

import (
    "github.com/deadsy/sdfx/sdf"
)

func Text(txt string, height, thickness, roundness float32) (sdf.SDF3, error) {
    f, err := sdf.LoadFont("cmr10.ttf")
    if err != nil {
        return nil, err
    }

    t := sdf.NewText(txt)

    s2d, err := sdf.TextSDF2(f, t, float64(height))
    if err != nil {
        return nil, err
    }

    // Extrude the 2D SDF to a 3D SDF.
    return sdf.ExtrudeRounded3D(s2d, float64(thickness), float64(roundness))
}
Copy after login

question

Is there a way to avoid using this package to copy the cmr10.ttf font file next to any executable?

For example, embed font files into the built binary. If possible, how exactly?

Are there any other ideas to try?

Solution

Starting from go 1.16, the go tool supports embedding static files directly into executable binaries. You can embed binary data of a font file using the //go:embed directive:

import (
    _ "embed"
)

//go:embed cmr10.ttf
var cmr10fontdata []byte
Copy after login
The contents of

cmr10.ttf will be inserted into the cmr10fontdata variable by the compiler. For other options, see What is the best way to bundle static resources in a go program?

Now since github.com/deadsy/sdfx/sdf only provides the sdf.loadfont(fname) helper function, you must use github.com/golang/freetype/truetype Parse font data. Note that sdf.loadfont() also uses this method behind the scenes, calling truetype.parse() with the binary data of the font file:

f, err := truetype.Parse(cmr10FontData)
// Check error
// use f if no error
Copy after login

The above is the detailed content of The code must load the font file, how to embed it into the built binary. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!