fonts_embedded.go 940 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package base64Captcha
  2. import (
  3. "embed"
  4. "github.com/golang/freetype"
  5. "github.com/golang/freetype/truetype"
  6. )
  7. type EmbeddedFontsStorage struct {
  8. fs embed.FS
  9. }
  10. func (s *EmbeddedFontsStorage) LoadFontByName(name string) *truetype.Font {
  11. fontBytes, err := s.fs.ReadFile(name)
  12. if err != nil {
  13. panic(err)
  14. }
  15. //font file bytes to trueTypeFont
  16. trueTypeFont, err := freetype.ParseFont(fontBytes)
  17. if err != nil {
  18. panic(err)
  19. }
  20. return trueTypeFont
  21. }
  22. // LoadFontsByNames import fonts from dir.
  23. // make the simple-font(RitaSmith.ttf) the first font of trueTypeFonts.
  24. func (s *EmbeddedFontsStorage) LoadFontsByNames(assetFontNames []string) []*truetype.Font {
  25. fonts := make([]*truetype.Font, 0)
  26. for _, assetName := range assetFontNames {
  27. f := s.LoadFontByName(assetName)
  28. fonts = append(fonts, f)
  29. }
  30. return fonts
  31. }
  32. func NewEmbeddedFontsStorage(fs embed.FS) *EmbeddedFontsStorage {
  33. return &EmbeddedFontsStorage{
  34. fs: fs,
  35. }
  36. }