Python 2.7
Код
# -*- coding: utf-8 -*-
from fontTools.ttLib import TTFont
from fontTools.unicode import Unicode
unicode_characters = [unichr(i) for i in range(0xffff)]
import os, numpy
def GetValidFonts():
fonts_folder = os.path.join(os.environ["WINDIR"], "fonts")
fonts_list = []
for filename in os.listdir(fonts_folder):
if filename.endswith(".ttf"):
fonts_list.append(os.path.join(fonts_folder, filename))
return fonts_list
# def GetArialFont_Path():
# import os
# return os.path.join(os.environ["WINDIR"], "fonts", "arial.ttf")
class FontObject:
AllAvailableUnicodeCodes = {"0":[]}
@staticmethod
def LoadUnicodesData():
# Export all possible unicodes available in system if not exists.
if not os.path.isfile("unicodes.json"):
for fontpath in GetValidFonts():
obj = FontObject(fontpath)
obj.performUnicodes()
with open("unicodes.json", "w") as f:
json.dump(FontObject.AllAvailableUnicodeCodes, f)
else:
with open("unicodes.json", "r") as f:
FontObject.AllAvailableUnicodeCodes = json.load(f)
return FontObject.AllAvailableUnicodeCodes
def performUnicodes(self):
not_existed = []
for i in self.unicodes:
if i not in FontObject.AllAvailableUnicodeCodes:
not_existed.append(i)
self.AllAvailableUnicodeCodes[self.path] = not_existed
self.AllAvailableUnicodeCodes["0"].extend(not_existed)
def __init__(self, path, ignoreunicodes = False):
self.ttfont = TTFont(path, 0, allowVID=0,
ignoreDecompileErrors=True,
fontNumber=-1)
self.path = path
if not ignoreunicodes:
self.unicodes = []
for x in self.ttfont['cmap'].tables:
for y in x.cmap.items():
self.unicodes.append(y[0])
if __name__ == "__main__":
import json
data = FontObject.LoadUnicodesData()
print "The maximum unicode char is %s, symbols in array %d" %(hex(numpy.max(data["0"])),
len(data["0"]))
for i in data['0']:
print i
try:
print i, hex(i), unichr(i)
except: pass
Ошибка
The maximum unicode char is 0x2ce93L, symbols in array 532570
8192
8192 0x2000 Traceback (most recent call last):
File "D:\Users\Nightmare\Desktop\font-keras\__main__.py", line 70, in <module>
[Finished in 0.5s] print i
IOError: [Errno 22] Invalid argument