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.
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)) }
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?
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
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
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!