fontforge使用python脚本调整字体 日期:2025-04-30 人气:0 fontforge是一个很强大的字体处理软件,它有图形化的操作界面和类似ps的字体编辑工具,除此之外它还有强大的python脚本支持能力,他对外有一整套完整的接口。 今天我们就来将一下怎么使用python脚本处理字体。 现在有这样一个需求,我有一个字体小篆,需要在这个字体的基础上微调生成另外一种篆体。 思路是这样的,把当前字体加载进来,然后调整各个点的位置,使字体加粗甚至充满整个字格。 fontforge的python script接口暴露了很多对象point,contour,layer,glyphPen,glyph,selection,font,其中font,glyph是引用对象可以直接修改,但是point和contour是只读的,想要调整每一个点,需要通过glyphPen来完成。 fontforge字体里的每个字由三个图层,我们只需要调整foreground层中的路径点就可以了,foreground层的索引是1。 自己开始写了一个算法,但是点的位置变化以后很容易超出边界,在`通义灵码`的帮助下,实现了一个算法,尽量控制变化的点不要超出边界。 详细代码如下: ``` import fontforge def convert_to_seal_script(font_path, output_path): # 打开字体文件 font = fontforge.open(font_path) center_x = 500 for glyph in font.glyphs(): if glyph.isWorthOutputting(): pen = glyph.glyphPen(True) # 创建画笔并清空画布 for contour in glyph.layers[1]: # 循环foreground画布 for index, point in enumerate(contour): x = point.x base_offset_factor = 0.5 max_offset_factor = 2.0 max_possible_offset = 1000 dx = x - center_x # Determine how much space is available before hitting the boundary if dx > 0: max_allowed_offset = max_possible_offset - x else: max_allowed_offset = x # Calculate desired offset with scaling desired_offset = dx * max_offset_factor distance_ratio = max_allowed_offset / max_possible_offset dynamic_offset_factor = base_offset_factor + (max_offset_factor - base_offset_factor) * distance_ratio desired_offset = dx * dynamic_offset_factor actual_offset = min(abs(desired_offset), max_allowed_offset) * (1 if dx > 0 else -1) new_x = x + actual_offset new_x = max(0, min(new_x, max_possible_offset)) if index == 0: pen.moveTo((new_x, point.y)) # 开始新轮廓 else: pen.lineTo((new_x, point.y)) pen.closePath() glyph.draw(pen) pen = None glyph.simplify() # 保存新字体 font.generate(output_path) font.close() # 调用示例 convert_to_seal_script("D:/env/phpstudy_pro/WWW/xiao-zhuan.ttf", "D:/env/phpstudy_pro/WWW/fang-zhuan.ttf") ``` 标签: 上一篇:vscode使用Community Server Connector运行JDK1.8项目报错 下一篇:怎样使用fontforge将图片转换成字体 随便看看 2025-07-04 vscode使用Community Server Connector运行JDK1.8项目报错 2025-07-03 vscode中为maven项目指定java版本 2025-06-27 利用puppeteer将网页保存为pdf 2025-06-27 一天二十四时辰表 2025-06-27 家谱中儿子和父母的关系有哪些? 留言