Как автоматически разделить файл шрифта на несколько частей?
Зачем мне это нужно? Потому что, как и до Chrome 99, он ограничивает максимальный размер несжатого файла шрифта до 30 МБ. Видеть https://chromium.googlesource.com/external/ots/+/v6.1.1/src/ots.cc
Кроме того, размер файла китайских шрифтов часто превышает 30 МБ. Например, шрифты CNS11643: https://data.gov.tw/dataset/5961
Таким образом, мне нужен инструмент автоматизации для разделения файла шрифта.
Приложение Шрифтфорж поддерживает сценарии Python, которые можно использовать для автоматического разделения шрифтов.
Это пример скрипта 2.
import glob
import os
import fontforge
# Up to Chrome 99, the max uncompressed size (e.g. ttf) of a font file is 30 MB.
# Please tune this value to split a font file to multiple files with size <= 30 MB.
maxGlyphsPerFile = 15000
# The glob expression of all font files.
fontFilesPath = "../fonts/*.ttf"
def splitFontFile(originalFile):
filename = os.path.basename(file)
filename = filename.split('.')[0]
font = fontforge.open(originalFile)
font.selection.all()
glyphs = font.selection.byGlyphs
totalGlyphs = len(list(glyphs))
totalFiles = int(totalGlyphs / maxGlyphsPerFile + 0.5)
print(f'{file} totalFiles: {totalFiles}')
for f in range(totalFiles):
g = 0
gMin = f * maxGlyphsPerFile
gMax = (f + 1) * maxGlyphsPerFile
for glyph in glyphs:
# Clear glyph out of range.
if not(gMin <= g and g < gMax):
glyph.clear()
g = g + 1
# Use this to check uncompressed font file sizes.
#font.generate(f'{filename}-{f+1}.ttf')
# Use this for compressed outputs.
font.generate(f'{filename}-{f+1}.woff2')
font.close()
font = fontforge.open(originalFile)
font.selection.all()
glyphs = font.selection.byGlyphs
font.close()
for file in glob.glob(fontFilesPath):
splitFontFile(file)
print('Done!')