python扫描同级目录 “字体“ 并得到字体Postscript 名称和中文名称

import os
import sys
import json
from fontTools.ttLib import TTFont
from tkinter import messagebox
# python E:\psdfontDir\testFont.py
# 定义包含可执行文件或脚本的目录
Json_config_directory = os.path.dirname(os.path.abspath(sys.executable if getattr(sys, 'frozen', False) else __file__))
# 字体信息字典,用于存储每个字体的详细信息
font_info_dict = {}

def load_fonts_from_directory(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.lower().endswith('.ttf'):
                try:
                    font_path = os.path.join(root, file)
                    font = TTFont(font_path)
                    postscript_names = set()  # 使用集合避免重复
                    chinese_names = set()
                    
                    for record in font['name'].names:
                        name_id = record.nameID
                        name_value = record.toUnicode().strip()
                        
                        if name_id == 1:  # Font Family name
                            if record.langID in (0x0804, 20527, 0x0807, 0x0809, 0x080A, 0x080C, 0x080D):  # IDs for Chinese languages
                                chinese_names.add(name_value)
                        elif name_id == 6:  # Postscript name
                            postscript_names.add(name_value.replace(" ", ""))  # 去掉空格并转换为大写
                    
                    # 如果没有找到中文名,则使用目录名
                    if not chinese_names:
                        chinese_names.add(os.path.basename(os.path.dirname(font_path)) or next(iter(postscript_names), ""))
                    
                    # 将所有组合添加到字典中
                    for postscript_name in postscript_names:
                        for chinese_name in chinese_names:
                            font_info_dict[postscript_name] = chinese_name
                            print(f"Loaded font: Postscript Name - {postscript_name}, Chinese Name - {chinese_name}")

                except Exception as e:
                    print(f"Failed to load font from {file}: {e}")

# 定义字体目录路径
fonts_directory = os.path.join(Json_config_directory, "字体")
if os.path.exists(fonts_directory):
    load_fonts_from_directory(fonts_directory)
else:
    print(f"Fonts directory {fonts_directory} does not exist.")

# 如果没有加载任何字体,则显示错误信息
if not font_info_dict:
    messagebox.showerror("错误", f"字体映射配置文件有误或为空:{fonts_directory}")
    sys.exit(1)

# 将字体信息保存到JSON文件
font_info_json_path = os.path.join(Json_config_directory, "font_info.json")
with open(font_info_json_path, 'w', encoding='utf-8') as f:
    json.dump(font_info_dict, f, ensure_ascii=False, indent=4)

print(f"Font information saved to {font_info_json_path}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值