Heim  >  Artikel  >  Backend-Entwicklung  >  Der Code muss die Schriftartdatei laden und sie in die erstellte Binärdatei einbetten

Der Code muss die Schriftartdatei laden und sie in die erstellte Binärdatei einbetten

WBOY
WBOYnach vorne
2024-02-09 17:27:08415Durchsuche

Der Code muss die Schriftartdatei laden und sie in die erstellte Binärdatei einbetten

In der PHP-Entwicklung ist das Laden von Schriftartdateien eine häufige Anforderung. Um jedoch die Verfügbarkeit und Benutzerfreundlichkeit der Schriftartdateien sicherzustellen, könnten wir erwägen, die Schriftartdateien in die erstellte Binärdatei einzubetten. Auf diese Weise müssen wir uns nicht mehr auf externe Schriftartdateien verlassen, sondern verwenden eingebettete Schriftarten direkt im Code. Wie bettet man also Schriftdateien ein? Dieser Artikel gibt Ihnen detaillierte Antworten.

Frageninhalt

Ich habe diesen Code in meinem Go-Paket. Es muss die cmr10.ttf-Schriftartdatei laden. Daher müssen sich die Schriftartdateien neben jeder ausführbaren Datei befinden, die dieses Paket verwendet.

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))
}

Frage

Gibt es eine Möglichkeit, die Verwendung dieses Pakets zum Kopieren der cmr10.ttf Schriftartdateien neben ausführbaren Dateien zu vermeiden?

Betten Sie beispielsweise Schriftartdateien in integrierte Binärdateien ein. Wenn möglich, wie genau?

Haben Sie weitere Ideen zum Ausprobieren?

Lösung

Ab go 1.16 unterstützt das go-Tool das direkte Einbetten statischer Dateien in ausführbare Binärdateien. Sie können Binärdaten einer Schriftartdatei mit der //go:embed-Direktive einbetten:

import (
    _ "embed"
)

//go:embed cmr10.ttf
var cmr10fontdata []byte
Der Inhalt von

cmr10.ttf 的内容将被编译器插入到 cmr10fontdata wird vom Compiler in die Variable cmr10fontdata eingefügt. Weitere Optionen finden Sie unter Was ist der beste Weg, statische Ressourcen in einem Go-Programm zu bündeln?

Jetzt, da github.com/deadsy/sdfx/sdf nur sdf.loadfont(fname)github.com/deadsy/sdfx/sdf 只提供 sdf.loadfont(fname) 辅助函数,您必须使用 github.com/golang/freetype/truetype 解析字体数据。请注意, sdf.loadfont() 也在幕后使用此方法,调用 truetype.parse() Hilfsfunktion, Sie müssen github.com verwenden /golang/freetype/truetype Schriftdaten analysieren. Beachten Sie, dass sdf.loadfont() diese Methode auch im Hintergrund verwendet und truetype.parse()

mit den Binärdaten der Schriftartdatei: 🎜
f, err := truetype.Parse(cmr10FontData)
// Check error
// use f if no error

Das obige ist der detaillierte Inhalt vonDer Code muss die Schriftartdatei laden und sie in die erstellte Binärdatei einbetten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen