【字体加密解决方案】某茄小说、某眼电影、某车帝、二手车网站

字体加密解码小工具

假设我们遇到了字体加密下载他的字体,转一个ttf

先把woff2转xml方便取出cmap ,然后吧所有cmap的key拿出来

python 复制代码
from  fontTools.ttLib import TTFont

from font_parse.font_to_img import font_to_img

woff2_path = "y8dl0-28arr.ttf"
font = TTFont('e26e946d8b2ccb7.woff2')
font.saveXML('font1.xml')
font_map = font.getBestCmap()
print(font_map)
font.close()
unicode_list=[chr(key) for key, _ in font_map.items()]
print(unicode_list)
normal_dict, error_dict = font_to_img(unicode_list, woff2_path)
print(normal_dict)
print(error_dict)

这个key就是字对应的Unicode的码

我们拿到这个码先encode在decode保证编码 统一

先加载字体文件

然后开一个画布,创建绘画对象,配置好大小,在根据这个码和对应的字体文件,在图像中绘制文本

最后使用ocr识别这个图片是什么文字,这个方法有个95%成功率。也算是个懒人解决方案了

python 复制代码
from PIL import ImageFont, Image, ImageDraw

from cnocr import CnOcr
import numpy as np
def font_to_img(code_list, filename, ignore_flag=True, score=0.95):
    normal_dict = {}
    be_padding_dict = {}
    ocr = CnOcr()
    """
        将字体画成图片
        code_list: 加密字符列表
        filename: 字体文件
        ignore_flag:是否忽视 sorce 返回结果
        score: 识别准确率默认 95%以上
    """
    img_size = 1024
    font = ImageFont.truetype(filename, int(img_size * 0.7))  # 加载指定文件名的 TrueType 字体文件,并设置字体大小为图像高度的 70%
    for char in code_list:
        char_code = char.encode().decode()  # 编码成字节序列,然后再解码成字符串。确保字符编码的一致性。
        img = Image.new('1', (img_size, img_size), 255) # 创建 1024*1024 背景颜色为白色(255)。参数 '1' 表示使用二值化(单色)模式。
        draw = ImageDraw.Draw(img)  # 创建一个图像绘制对象,用于在图像上绘制文本
        x, y = draw.textsize(char_code, font=font)   # 计算绘制字符所需的文本区域大小。


        draw.text(((img_size - x) // 2, (img_size - y) // 2), char_code, font=font, fill=0)  # 在图像中心绘制文本,填充颜色为黑色(0)。这里通过计算使文本位于图像中心。

        # ocr部分
        # 将单通道 转为 三通道
        img = img.convert("RGB")
        # word = ocr.ocr_for_single_line("%s.jpg" % mame_ocr)
        word = ocr.ocr_for_single_line(np.array(img))
        if word["score"] >= score:
            # 处理重复名字
            # img.save("%s_%s.jpg" % (char_code, word["text"]))
            normal_dict[char_code] = word["text"]
        else:
            be_padding_dict[char_code] = word
            img.save("./image/%s_%s_be_padding.jpg" % (char_code, word["text"]))
            if ignore_flag:
                normal_dict[char_code] = word["text"]
    return normal_dict, be_padding_dict
相关推荐
wangchunyu1149 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
2501_9445215910 小时前
Immer 跨端三方库仓颉适配全流程
python·eclipse·django
信誓旦旦的程序猿10 小时前
【Python量化实战宝典 #26】止损与回撤控制手册:移动止损、最大回撤(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
2501_9445215910 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
Patrick在香港11 小时前
同一行 strftime,两台机器跑出两种日期
python·datetime·时区·locale·日期处理
2601_9679873711 小时前
用Python+OpenCV+YOLO写个游戏脚本:从自动瞄准到自动采集的保姆级教程
python·opencv·yolo·目标检测·游戏自动化
meiying883811 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
人工智能导论实践课11 小时前
【GUI桌面开发3】PyCharm配置外部工具
ide·python·pycharm
一千柯橘11 小时前
LangChain 的实时输出处理: stream_events 和 Streaming
python·langchain·agent
贾公子11 小时前
图片 AIGC 检测接入实战——URL 与 Base64 的取舍、体积校验与「你送过去的可能不是那张图」
python·aigc