最近嵌入式项目需要ttf标准的字体文件,但是收到的文件格式要么太新了,要么是多合一的ttc文件,要么是苹果电脑使用的otf格式,都无法正常使用。另外如果有老旧电脑系统使用也是需要标准ttf。从各种途径试验了各种软件,效果都不理想。因此求助于万能的Python。
免责声明:因为字体转化因为转化算法的不同可能会造成失真,具体请了解清楚后使用;因字体版权问题造成的纠纷与文章作者无关,本人仅做技术资料分享。
完整代码如下:有帮助的话请多多关注、点赞、收藏
from fontTools.ttLib import TTCollection, TTFont
from pathlib import Path
import os
def normalize_ttf(font_path, output_dir="ttf_标准输出"):
"""
修复、标准化不规范的 TTF 字体
"""
Path(output_dir).mkdir(exist_ok=True)
try:
font = TTFont(font_path)
# 强制重新保存,自动修复部分表结构问题
name_stem = Path(font_path).stem
out_path = os.path.join(output_dir, f"{name_stem}_标准.ttf")
font.save(out_path)
print(f"✅ TTF 已标准化:{out_path}")
except Exception as e:
print(f"❌ TTF 标准化失败:{e}")
def ttc_to_ttf(ttc_path, output_dir="ttf_标准输出"):
Path(output_dir).mkdir(exist_ok=True)
try:
ttc = TTCollection(ttc_path)
stem = Path(ttc_path).stem
for i, f in enumerate(ttc.fonts):
out = os.path.join(output_dir, f"{stem}_{i+1}.ttf")
f.save(out)
print(f"✅ TTC 已导出:{out}")
except Exception as e:
print(f"❌ TTC 导出失败:{e}")
def otf_to_ttf(otf_path, output_dir="ttf_标准输出"):
Path(output_dir).mkdir(exist_ok=True)
try:
font = TTFont(otf_path)
stem = Path(otf_path).stem
out = os.path.join(output_dir, f"{stem}_转TTF.ttf")
font.save(out)
print(f"✅ OTF 已转换:{out}")
except Exception as e:
print(f"❌ OTF 转换失败:{e}")
if __name__ == "__main__":
print("===== 字体标准化工具(修复+转换)=====\n")
# 自动处理你这三个文件
files = {
"ttc": "数字.ttc",
"otf": "通用.otf",
"ttf": "弹窗.ttf"
}
if os.path.exists(files["ttc"]):
ttc_to_ttf(files["ttc"])
if os.path.exists(files["otf"]):
otf_to_ttf(files["otf"])
if os.path.exists(files["ttf"]):
normalize_ttf(files["ttf"])
print("\n🎉 全部处理完成!输出文件夹:ttf_标准输出")
# 自动打开输出文件夹
if os.name == "nt":
os.startfile("ttf_标准输出")
else:
print("文件夹路径:" + os.path.abspath("ttf_标准输出"))
运行方法:安装Python3.1x,安装必要的库、新版Python好像默认自带fontTools,不需要额外安装。修改这几行代码,改成自己所需要的文件名:需要一点Python代码基础
将代码写进txt文本,后缀改成.py。将文件与要转化的字体文件放在同目录下,运行.py文件即可,生成的文件会在目录的“ttf_标准输出”文件夹里
转化结果如下,测试全都可以正常使用


1万+

被折叠的 条评论
为什么被折叠?



