【发布时间】:2019-10-23 15:45:38
【问题描述】:
我正在尝试根据它的源 svg 文件重新编译一个 ttf 字形字体。
我正在使用 python 和 FontForge 并努力将 SVG 形状转换为 FontForge 的SplineSet 格式。例如this SVG file
用 FontForge 生成的字体表示为 SplineSet 格式
SplineSet
85 235 m 1,0,-1
85 85 l 1,1,-1
235 85 l 1,2,-1
235 43 l 1,3,-1
85 43 l 2,4,5
68 43 68 43 55.5 55.5 c 128,-1,6
43 68 43 68 43 85 c 2,7,-1
43 235 l 1,8,-1
85 235 l 1,0,-1
427 85 m 1,9,-1
427 235 l 1,10,-1
469 235 l 1,11,-1
469 85 l 2,12,13
469 68 469 68 456.5 55.5 c 128,-1,14
444 43 444 43 427 43 c 2,15,-1
277 43 l 1,16,-1
277 85 l 1,17,-1
427 85 l 1,9,-1
427 469 m 2,18,19
444 469 444 469 456.5 456.5 c 128,-1,20
469 444 469 444 469 427 c 2,21,-1
469 277 l 1,22,-1
427 277 l 1,23,-1
427 427 l 1,24,-1
277 427 l 1,25,-1
277 469 l 1,26,-1
427 469 l 2,18,19
363 331 m 128,-1,28
363 318 363 318 353.5 308.5 c 128,-1,29
344 299 344 299 331 299 c 128,-1,30
318 299 318 299 308.5 308.5 c 128,-1,31
299 318 299 318 299 331 c 128,-1,32
299 344 299 344 308.5 353.5 c 128,-1,33
318 363 318 363 331 363 c 128,-1,34
344 363 344 363 353.5 353.5 c 128,-1,27
363 344 363 344 363 331 c 128,-1,28
213 235 m 1,35,-1
277 156 l 1,36,-1
320 213 l 1,37,-1
384 128 l 1,38,-1
128 128 l 1,39,-1
213 235 l 1,35,-1
85 427 m 1,40,-1
85 277 l 1,41,-1
43 277 l 1,42,-1
43 427 l 2,43,44
43 444 43 444 55.5 456.5 c 128,-1,45
68 469 68 469 85 469 c 2,46,-1
235 469 l 1,47,-1
235 427 l 1,48,-1
85 427 l 1,40,-1
EndSplineSet
我想创建一个接收 SVG 并输出 SplineSet 的函数。
这是我迄今为止尝试过的(一种低效、幼稚的方式来生成临时字体,然后抓取SplineSet 数据。顺便说一句,与真实字体相比,这非常不准确)
import fontforge
def main():
font = fontforge.font()
unicode_id = 57865
unicode_name = 'uni' + hex(unicode_id).upper()[2:]
char = font.createChar(unicode_id, unicode_name)
glyph = char.importOutlines('file.svg')
font.save('result.sfd')
关于如何做到这一点的任何参考?
【问题讨论】:
-
你找到从 SVG 文件中获取 SplineSet 数据的方法了吗?
-
@christegho,还没有...这是目前暂停的副项目的一部分
标签: python google-material-icons fontforge