字体反爬之自动化通过字体文件生成映射字典

1、首先找到以.ttf结尾的字体文件,下载下来,以我的字体文件sfont.ttf为例

sont.ttf下载地址https://download.csdn.net/download/lingyingdon/89534953

目前只测试了.ttf文件。如果想使用woff字体文件,请自行测试

2、下载分割字体文件的软件fontforge, 安装后将安装路径添加到环境变量中去,该软件结合python脚本分割字体文件为单个字体图片及其对应的编码作为文件名

  • 官网地址如下

    https://fontforge.org/en-US/

  • python脚本如下split_font.py

    import os
    import argparse
    import sys
    
    import fontforge
    
    
    def main(font_path, folder):
        # 字体文件分割脚本,需要配合fontforge使用
        # font_path = r"F:\download\sfont.ttf"  # 字体文件路径
        # folder = "img"  # 字体文件分割后保存的目录
        F = fontforge.open(font_path)
        for name in F:
            filename = name + ".png"
            export_path = os.path.join(folder, filename)
            F[name].export(export_path)
            
    if __name__ == '__main__':
    
        parser = argparse.ArgumentParser(description='字体分割.....')
        parser.add_argument('-f', '--file_path', type=str, help='字体文件路径,字体文件为.ttf结尾')
        parser.add_argument('-d', '--dir', type=str, help='输出字体文件目录')
    
        args = parser.parse_args()
        if args.file_path and args.dir:
            main(args.file_path, args.dir)
        else:
            print("请输入字体文件路径和输出字体文件目录")
            sys.exit(1)
    
  • 通过执行以下命令脚本分割字体文件(前提是将fontforge添加到环境变量)

    fontforge split_font.py

  • 处理后的图片如下

3、由于分割后的字体文件相对比较模糊,通过使用pillow模块扩张字体图片大小来增加图片的清晰度

def strength_pic(pic_path):
    """
    图片增强
    猜想是,在进行卷积处理的时候,选择的算子在边界处理上更倾向于重新计算,而实际上我们的边界是不需要计算的,所以这里手动将边界扩张
    """

    old_im = Image.open(pic_path)
    old_size = old_im.size

    new_size = (300, 300)
    new_im = Image.new("RGB", new_size, color='white')  ## luckily, this is already black!
    new_im.paste(old_im, (int((new_size[0] - old_size[0]) / 2),
                          int((new_size[1] - old_size[1]) / 2)))

    new_im.save(pic_path.replace('img', 'img_output'))
  • 经过处理后的图片如下

4、使用ddddocr模块来识别字体图片

def ocr_img(ocr, file_path):
    """
    使用ddddocr模块识别
    :param ocr:  ddddocr实例化对象
    :param file_path:  图片文件路径
    :return:  识别结果
    """
    image = open(file_path, "rb").read()
    result = ocr.classification(image)
    return result

5、最后来看一下运行结果,全自动执行,不需要在一个一个整理字体字典了(我这里在代码中用&#x对uni进行了替换)

想要完整代码的联系fangyingdon@163.com

相关推荐
唐古乌梁海11 小时前
【pytest】编写自动化测试用例命名规范README
自动化·pytest
奔跑吧邓邓子17 小时前
【Python爬虫(34)】Python多进程编程:开启高效并行世界的钥匙
开发语言·爬虫·python·多进程
dme.19 小时前
Python爬虫selenium验证-中文识别点选+图片验证码案例
爬虫·python
CL_IN19 小时前
企业数据集成:实现高效调拨出库自动化
java·前端·自动化
大囚长19 小时前
AI工作流+专业知识库+系统API的全流程任务自动化
运维·人工智能·自动化
matlabgoodboy19 小时前
Matlab代编电气仿真电力电子电机控制自动化新能源微电网储能能量
开发语言·matlab·自动化
B站计算机毕业设计超人20 小时前
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hadoop·爬虫·机器学习·课程设计·数据可视化·推荐算法
风123456789~20 小时前
【爬虫基础】第一部分 网络通讯-编程 P3/3
网络·爬虫
奔跑吧邓邓子21 小时前
【Python爬虫(44)】分布式爬虫:筑牢安全防线,守护数据之旅
开发语言·分布式·爬虫·python·安全
likeyou~coucou1 天前
自动化之ansible(二)
运维·自动化·ansible