Untitled
unknown
plain_text
a year ago
3.2 kB
4
Indexable
import os import tkinter as tk from tkinter import filedialog, messagebox from fontTools.ttLib import TTFont from fontTools import subset, merge def subset_font(font_file, whitelist, subset_output): # 加载字体 font = TTFont(font_file) # 创建 Subsetter 对象并填充白名单字符 options = subset.Options() subsetter = subset.Subsetter(options=options) subsetter.populate(text=whitelist) subsetter.subset(font) # 保存子集字体 font.save(subset_output) print(f"Subset font saved to {subset_output}") def merge_fonts(font_file1, font_file2, output_file): font1 = TTFont(font_file1) font2 = TTFont(font_file2) # 获取两个字体的 Unicode 映射 us1 = {} for cmap in font1['cmap'].tables: if cmap.isUnicode(): us1.update(cmap.cmap) us2 = {} for cmap in font2['cmap'].tables: if cmap.isUnicode(): us2.update(cmap.cmap) # 找到只存在于第一个字体的字形 unique_to_font1 = [us1[code] for code in us1 if code not in us2] # 创建 Subsetter 对象并填充 unique_to_font1 options = subset.Options() subsetter = subset.Subsetter(options) subsetter.populate(glyphs=unique_to_font1) subsetter.subset(font1) temp_subset = "temp_subset.ttf" subset.save_font(font1, temp_subset, options) # 合并字体 m = merge.Merger() merged_font = m.merge([font_file2, temp_subset]) merged_font.save(output_file) print(f"Merged font saved to {output_file}") # 删除临时文件 os.remove(temp_subset) def browse_file(var): file = filedialog.askopenfilename(filetypes=[("TTF files", "*.ttf")]) var.set(file) def run(): whitelist = whitelist_text.get("1.0", tk.END).strip() font_file1 = font1_var.get() font_file2 = font2_var.get() output_file = "merged_output.ttf" if not whitelist or not font_file1 or not font_file2: messagebox.showwarning("Missing Input", "Please provide all inputs.") return try: subset_output = "subset.ttf" subset_font(font_file1, whitelist, subset_output) merge_fonts(font_file2, subset_output, output_file) os.remove(subset_output) messagebox.showinfo("Success", f"Merged font saved to {output_file}") except Exception as e: messagebox.showerror("Error", str(e)) app = tk.Tk() app.title("Font Merger") tk.Label(app, text="填入希望字体1中包含的字符(白名单)").pack() whitelist_text = tk.Text(app, height=5) whitelist_text.pack() font1_var = tk.StringVar() font2_var = tk.StringVar() tk.Label(app, text="选择字体1路径").pack() tk.Entry(app, textvariable=font1_var, width=50).pack() tk.Button(app, text="浏览文件", command=lambda: browse_file(font1_var)).pack() tk.Label(app, text="选择字体2路径").pack() tk.Entry(app, textvariable=font2_var, width=50).pack() tk.Button(app, text="浏览文件", command=lambda: browse_file(font2_var)).pack() tk.Button(app, text="合并字体", command=run).pack() app.mainloop()
Editor is loading...
Leave a Comment