1 回答

TA貢獻1799條經(jīng)驗 獲得超9個贊
您可能應(yīng)該查看fontTools Python 庫,其中包含處理字體所需的組件。
你感興趣的字體表是'cmap'表,你想要的基本上是Unicode映射子表的反向映射(有幾種子表可以映射Unicode;如果你不熟悉這個概念,我建議查看OpenType 規(guī)范以獲取更多信息)?;旧夏銜玫?Unicode 到字形的映射,然后反過來。
fontTools 實際上有一個很好的功能,它會自動選擇“最佳”cmap 子表(它有一個首選 cmap 子表類型的有序列表,并返回您打開的特定字體中第一個可用的)。這是使用該函數(shù)的示例:
from fontTools.ttLib import TTFont
from collections import defaultdict
font = TTFont('path/to/fontfile.ttf')
unicode_map = font.getBestCmap()
reverse_unicode_map = defaultdict(list)
for k, v in unicode_map.items():
reverse_unicode_map[v].append(k)
reverse_unicode_map 現(xiàn)在擁有一個字形(字形名稱)到整數(shù)代碼點列表的映射:
>>> reverse_unicode_map
defaultdict(<class 'list'>, {'.null': [0, 8, 29], 'nonmarkingreturn': [9, 13], 'space': [32], 'exclam': [33], 'quotedbl': [34], 'numbersign': [35], 'dollar': [36], 'percent': [37], 'quotesingle': [39], 'parenleft': [40], 'parenright': [41], 'asterisk': [42], 'plus': [43], 'comma': [44], 'hyphen': [45], 'period': [46], 'slash': [47], 'zero': [48], 'one': [49], 'two': [50], 'three': [51], 'four': [52], 'five': [53]})
您可以看到有 2 個字形“.null”和“nonmarkingreturn”映射到多個 Unicode。
如果您需要將字形名稱解析為字形索引,則可以使用該font.getGlyphID()方法(傳入字形名稱;它將返回相應(yīng)的整數(shù) ID)。
添加回答
舉報