首页 >后端开发 >Golang >代码必须加载字体文件,如何嵌入到构建的二进制文件中

代码必须加载字体文件,如何嵌入到构建的二进制文件中

WBOY
WBOY转载
2024-02-09 17:27:08473浏览

代码必须加载字体文件,如何嵌入到构建的二进制文件中

在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 的内容将被编译器插入到 cmr10fontdata 变量中。有关其他选项,请参阅 在 go 程序中捆绑静态资源的最佳方式是什么?

现在由于 github.com/deadsy/sdfx/sdf 只提供 sdf.loadfont(fname)github.com/deadsy/sdfx/sdf 只提供 sdf.loadfont(fname) 辅助函数,您必须使用 github.com/golang/freetype/truetype 解析字体数据。请注意, sdf.loadfont() 也在幕后使用此方法,调用 truetype.parse() 辅助函数,您必须使用 github.com/golang/freetype/truetype 解析字体数据。请注意, sdf.loadfont() 也在幕后使用此方法,调用 truetype.parse()

与字体文件的二进制数据:🎜
f, err := truetype.Parse(cmr10FontData)
// Check error
// use f if no error

以上是代码必须加载字体文件,如何嵌入到构建的二进制文件中的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除