woff文件处理
可视化软件
woff文件一般使用fontcreator查看
链接: https://dqunying2.jb51.net/201802/tools/fontcreator_jb51.rar.
xml文件结构关系
需要先将woff
文件转化为xml
格式
from fontTools.ttLib import TTFont
import xmltodict
font = TTFont('7.woff')
# 保存为xml文件
font.saveXML('7.xml')
# 读取xml文件内容
with open('7.xml', 'r') as f:
xmldict = xmltodict.parse(f.read())
for i in xmldict['ttFont']['glyf']['TTGlyph'][1:]:
# 此处i为OrderedDict 需要转换才能进行下一步取值
# ww = json.loads(json.dumps(i))
# for i in ww:
# print(i)
print(i)
xml的字体文件格式一览,其中主要看GlyphOrder,cmap,glyf
其中GlyphOrder
可映射文件id从fontcreator软件中获取该字,如下unie842为6,unie269为9
,以此类推
cmap
则表明了映射关系,此处多半是网页呈现的代码
glyf
是对字体的图像描写笔画显示
<TTGlyph name="unia863" xMin="0" yMin="-164" xMax="996" yMax="804">
<contour>
#点 x.y on 0表示为弧形区域 1表示矩形
<pt x="22" y="-72" on="1"/>
<pt x="96" y="59" on="0"/>
<pt x="102" y="322" on="1"/>
静态,动态woff文件处理方法
对于静态文件只需要下载到本地,获取字符集的列表顺序,再根据xml中的映射关系即可解决。
对于动态文件有2种情况一种是uniname变化,字符集不变,这种情况需要每次请求都下载一次woff文件。
第二种情况是2者都会变化,字符集顺序也会变化,这种情况博主的处理方式为,对`glyf`中的字符笔划x,y的值,on的排列等数据进行操作,拿到该字符唯一的特征,再去映射文件字体即可该方法适用于少量的字体反爬。