代码必须加载字体文件,如何嵌入到构建的二进制文件中
在PHP开发中,加载字体文件是一项常见的需求。然而,为了确保字体文件的可用性和方便性,我们可能会考虑将字体文件嵌入到构建的二进制文件中。这样一来,我们就不再需要依赖外部的字体文件,而是直接在代码中使用嵌入的字体。那么,如何实现字体文件的嵌入呢?本文将为您详细解答。
问题内容
我的 go 包中有这段代码。它必须加载 cmr10.ttf
字体文件。因此,字体文件必须位于使用此包的每个可执行文件旁边。
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))
}
问题
有没有办法避免使用此包将 cmr10.ttf
字体文件复制到任何可执行文件旁边?
例如,将字体文件嵌入到构建的二进制文件中。如果可以的话具体怎么做?
还有其他可以尝试的想法吗?
解决方法
从 go 1.16 开始,go 工具支持将静态文件直接嵌入可执行二进制文件中。您可以使用 //go:embed
指令嵌入字体文件的二进制数据:
import (
_ "embed"
)
//go:embed cmr10.ttf
var cmr10fontdata []byte
cmr10.ttf
的内容将被编译器插入到 cmr10fontdata
变量中。有关其他选项,请参阅 在 go 程序中捆绑静态资源的最佳方式是什么?
现在由于 github.com/deadsy/sdfx/sdf
只提供 sdf.loadfont(fname)
辅助函数,您必须使用 github.com/golang/freetype/truetype
解析字体数据。请注意, sdf.loadfont()
也在幕后使用此方法,调用 truetype.parse()
与字体文件的二进制数据:
f, err := truetype.Parse(cmr10FontData)
// Check error
// use f if no error
以上就是代码必须加载字体文件,如何嵌入到构建的二进制文件中的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341