首頁  >  文章  >  後端開發  >  程式碼必須載入字型文件,如何嵌入到建置的二進位檔案中

程式碼必須載入字型文件,如何嵌入到建置的二進位檔案中

WBOY
WBOY轉載
2024-02-09 17:27:08415瀏覽

程式碼必須載入字型文件,如何嵌入到建置的二進位檔案中

在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

以上是程式碼必須載入字型文件,如何嵌入到建置的二進位檔案中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除