读取字体名称
读取ttf
, otf
字体文件的名称
# -*- coding: utf-8 -*-
#
# @Author: CPS
# @email: 373704015@qq.com
# @Date:
# @Last Modified by: CPS
# @Last Modified time: 2022-07-27 17:42:42.055123
# @file_path "W:\CPS\MyProject\test"
# @Filename "ps_test.py"
# @Description: 功能描述
#
import os, sys
sys.path.append("..")
from os import path
from fontTools.ttLib import TTFont
import xml.etree.ElementTree as ET
class Found(Exception):
pass
def find_name_of_xml(xml_data) -> str:
font_name = list()
try:
for name_item in xml_data.findall("name"):
namerecords = name_item.findall("namerecord")
for each_t in namerecords:
if each_t.attrib["nameID"] == "1":
if str(each_t.text).strip() != "":
font_name = str(each_t.text).strip()
raise Found()
except Found:
return font_name
else:
return ""
if __name__ == "__main__":
font_dir = r"W:\CPS\MyProject\python-tools\ps-tools\data\fonts"
font_list = ["2019 Pro Bowl.ttf", "NFL Vikings 2013 Left.otf"]
for font_name in font_list:
font_path = path.join(font_dir, font_name)
font_xml_path = path.join(font_dir, f"{path.splitext(font_name)[0]}.xml")
t = TTFont(font_path)
# print(t.getTableData("name"))
# 判断是否存在,不存在则创建
if not path.exists(font_xml_path):
t = TTFont(font_path)
t.saveXML(font_xml_path)
# 读取xml
font_xml_obj = ET.parse(font_xml_path)
root = font_xml_obj.getroot()
font_name = find_name_of_xml(root)
print(font_name)
首先通过fontTools
模块将字体文件导出xml信息
当前字体名字的判断依据是 name
标签内namerecord
标签的nameID
属性为1的标签内容认定为字体的font_name
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
2019 Pro Bowl
</namerecord>
</name>