技术背景

小说等平台采用动态woff2字体实现文字反爬,传统CSS映射方法已无法满足需求。本文通过Python实现:

  1. 使用fontTools解析woff2字体结构
  2. 基于FreeTypePen绘制矢量字形
  3. 结合Tesseract OCR实现字符识别
  4. 构建完整字体映射表

环境准备

# 核心依赖库
pip install fonttools pillow pytesseract

代码

from fontTools.ttLib import TTFont
from fontTools.pens.freetypePen import FreeTypePen
from fontTools.misc.transform import Offset
import os
import pytesseract

# todo 根据实际情况需要修改 配置 Tesseract 路径(Windows 需指定)
pytesseract.pytesseract.tesseract_cmd = r'D:\Program Files (x86)\Tesseract-OCR\tesseract.exe'

def export_all_glyphs(woff2_path, output_dir="glyph_images"):
font = TTFont(woff2_path, flavor='woff2')
glyph_set = font.getGlyphSet()
os.makedirs(output_dir, exist_ok=True)

ascender = font['OS/2'].usWinAscent
descender = -font['OS/2'].usWinDescent
height = ascender - descender

for gname in glyph_set.keys():
if 'notdef' in gname:
continue
glyph = glyph_set[gname]
pen = FreeTypePen(None)
glyph.draw(pen)

# 生成图片
image = pen.image(
width=glyph.width,
height=height,
transform=Offset(0, -descender))
# 识别文字(中文需要指定语言)
text = pytesseract.image_to_string(image, lang='chi_sim',config='--psm 6')
print(gname,'====',text)
font.close()
# 示例调用
export_all_glyphs("dc027189e0ba4cd.woff2")