Apipi*头像
关注
猿人学 第七题 动态字体,随风漂移封面图

猿人学 第七题 动态字体,随风漂移

这个题其实没什么好说的,给你们脚本,直接当工具用就好

import requests
import execjs
from font import extract_text_from_font


def get_num(obj, data):
    sum = 0

    for item in data:
        mmm = 0
        for i in range(0, len(item), 7):
            s = item[i : i + 7]
            for j in obj:
                if s == j:
                    if obj[j] == 'o': obj[j] = '0'
                    mmm = mmm * 10 + int(obj[j])
        sum += mmm

    print(sum)

    return sum


def get_pho(woff):
    f = open("07.js", "r", encoding="utf-8")
    js_code = f.read()
    f.close()
    js = execjs.compile(js_code)
    js.call("de", woff)


def get_base():
    sum = 0

    for i in range(1, 6):

        url = "https://match.yuanrenxue.cn/api/question/7"

        headers = {
            "accept": "application/json, text/javascript, */*; q=0.01",
            "accept-encoding": "gzip, deflate, br, zstd",
            "accept-language": "zh-CN,zh;q=0.9",
            "cache-control": "no-cache",
            "cookie": "Hm_lvt_434c501fe98c1a8ec74b813751d4e3e3=1779001012; Hm_lvt_f80b2b389f44bbfb3bfe1704817d44e0=1780731259,1783231638; sessionid=2op20261dehuwjd7asnghz331b4nwexr",
            "pragma": "no-cache",
            "priority": "u=1, i",
            "referer": "https://match.yuanrenxue.cn/match/7",
            "sec-ch-ua": "Not/A)Brand;v=99, Chromium;v=148",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "Windows",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "same-origin",
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36",
            "x-requested-with": "XMLHttpRequest"
        }

        if i == 5:
            headers["user-agent"] = 'yuanrenxue'

        params = {
            "page": i,
            "pageSize": "10",
            "kw": ""
        }

        res = requests.get(url, headers=headers, params=params)

        woff = res.json().get("woff")
        data = res.json().get("data")

        get_pho(woff)

        obj = extract_text_from_font("font.woff")


        sum += get_num(obj, data)

    print(sum)



if __name__ == '__main__':
    get_base()
const fs = require('fs');

de = function (base){
    const buffer = Buffer.from(base, 'base64');
    fs.writeFileSync('font.woff', buffer);
}

// base = "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"
// de(base)
import ddddocr
from fontTools.ttLib import TTFont
from io import BytesIO
from PIL import Image, ImageDraw, ImageFont
import os

"""
    将字体字符转换为图像
    :param cmap_code: 字体字符对应的 cmap code
    :param font_path: 字体文件路径
    :return: PIL 图像对象
"""

def convert_cmap_to_image(cmap_code, font_path):

    img_size = 1024
    img = Image.new("1", (img_size, img_size), 255)   # 创建一个黑白图像对象
    draw = ImageDraw.Draw(img)                                        # 创建绘图对象
    font = ImageFont.truetype(font_path, int(img_size * 0.7))         # 加载字体文件
    character = chr(cmap_code)                                        # 将 cmap code 转换为字符

    bbox = draw.textbbox((0, 0), character, font=font)             # 获取文本在图像中的边界框
    width= bbox[2] - bbox[0]                                          #文本的宽度
    height = bbox[3] - bbox[1]                                        # 文本的高度
    draw.text(((img_size - width) // 2, (img_size - height) // 7), character, font=font, fill=0)  # 绘制文本,并居中显示

    return img

def extract_text_from_font(font_path):
    font = TTFont(font_path)                                          # 加载字体文件
    # font.saveXML("xxx.xml")
    ocr = ddddocr.DdddOcr(beta=True, show_ad=False)                   # 实例化 ddddocr 对象
    font_map = {}

    for cmap_code, glyph_name in font.getBestCmap().items():
        bytes_io = BytesIO()
        image = convert_cmap_to_image(cmap_code, font_path)           # 将字体字符转换为图像
        image. save(bytes_io, "PNG")

        text = ocr.classification(bytes_io.getvalue())                # 图像识别
        # image.save(f"./tu/{text}.png", "PNG")                               # 保存图像
        # print(f"Unicode码点: {cmap_code} - Unicode字符:{glyph_name},识别结果:{text}")
        font_map[hex(cmap_code).replace("0x", "&#x")] = text

    os.remove(font_path)
    return font_map


if __name__ == '__main__':
    font_file_path = "font.woff"
    # print(extract_text_from_font(font_file_path))

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/2501_93802159/article/details/165733316

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--