Maison  >  Article  >  développement back-end  >  Le code doit charger le fichier de police, comment l'intégrer dans le binaire construit

Le code doit charger le fichier de police, comment l'intégrer dans le binaire construit

WBOY
WBOYavant
2024-02-09 17:27:08458parcourir

Le code doit charger le fichier de police, comment lintégrer dans le binaire construit

Dans le développement PHP, le chargement des fichiers de polices est une exigence courante. Cependant, pour garantir la disponibilité et la commodité des fichiers de polices, nous pourrions envisager d'intégrer les fichiers de polices dans le binaire construit. De cette façon, nous n’avons plus besoin de nous appuyer sur des fichiers de polices externes, mais d’utiliser des polices intégrées directement dans le code. Alors, comment intégrer des fichiers de polices ? Cet article vous apportera des réponses détaillées.

Contenu de la question

J'ai ce code dans mon package go. Il doit charger le fichier de police cmr10.ttf. Par conséquent, les fichiers de polices doivent être situés à côté de chaque fichier exécutable qui utilise ce 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))
}

Question

Existe-t-il un moyen d'éviter d'utiliser ce package pour copier les fichiers de polices cmr10.ttf à côté des exécutables ?

Par exemple, intégrez des fichiers de polices dans des binaires intégrés. Si possible, comment exactement ?

D'autres idées à essayer ?

Solution

À partir de go 1.16, l'outil go prend en charge l'intégration de fichiers statiques directement dans des binaires exécutables. Vous pouvez intégrer les données binaires d'un fichier de police à l'aide de la directive //go:embed : 

import (
    _ "embed"
)

//go:embed cmr10.ttf
var cmr10fontdata []byte
Le contenu de

cmr10.ttf 的内容将被编译器插入到 cmr10fontdata sera inséré dans la variable cmr10fontdata par le compilateur. Pour d'autres options, consultez Quelle est la meilleure façon de regrouper des ressources statiques dans un programme Go ?

Maintenant, car github.com/deadsy/sdfx/sdf ne fournit que sdf.loadfont(fname)github.com/deadsy/sdfx/sdf 只提供 sdf.loadfont(fname) 辅助函数,您必须使用 github.com/golang/freetype/truetype 解析字体数据。请注意, sdf.loadfont() 也在幕后使用此方法,调用 truetype.parse() fonction d'assistance, vous devez utiliser github.com / golang/freetype/truetype Analyser les données de police. Notez que sdf.loadfont() utilise également cette méthode en arrière-plan, en appelant truetype.parse()

avec les données binaires du fichier de police : 🎜
f, err := truetype.Parse(cmr10FontData)
// Check error
// use f if no error

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer