From 75b6943e10c85bb6925cda3a24e9b4dd10b31447 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Thu, 15 Oct 2026 14:25:05 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=AD=97=E4=BD=93=E5=A4=84=E7=90=86):=20?= =?UTF-8?q?=E9=99=8D=E4=BD=8E=E5=AD=97=E4=BD=93=E8=A3=81=E5=89=AA=E5=86=85?= =?UTF-8?q?=E5=AD=98=E5=BC=80=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/base/font/subset.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/internal/base/font/subset.go b/internal/base/font/subset.go index 5f5ee91..9763ce8 100644 --- a/internal/base/font/subset.go +++ b/internal/base/font/subset.go @@ -227,9 +227,18 @@ func SubsetSourceSFNT(data []byte, usage *Usage) []byte { for _, dependency := range dependencies { glyphs[dependency] = true } - var glyf, loca []byte + glyfSize := 0 + for id, retained := range glyphs { + if retained { + data, _ := trueTypeGlyphData(sfnt.Tables, id) + glyfSize += len(data) + len(data)%2 + } + } + locaFormat := binary.BigEndian.Uint16(sfnt.Tables["head"][50:]) + glyf := make([]byte, 0, glyfSize) + loca := make([]byte, 0, (int(sfnt.NumGlyphs())+1)*(2+2*int(locaFormat))) for id := 0; id <= int(sfnt.NumGlyphs()); id++ { - if binary.BigEndian.Uint16(sfnt.Tables["head"][50:]) == 0 { + if locaFormat == 0 { loca = binary.BigEndian.AppendUint16(loca, uint16(len(glyf)/2)) } else { loca = binary.BigEndian.AppendUint32(loca, uint32(len(glyf)))