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

ops/2024/9/23 7:27:53/

前言:该题主要是考对fontTools.ttLib.TTFont的操作,另外就是对字典互相映射的操作

一、woff文件存储

python">from fontTools.ttLib import TTFont #pip install fontTools
def save_woff(response):woff = response['woff']woff_file = base64.b64decode(woff.encode())with open('aim.woff', 'wb') as f:f.write(woff_file)

二、可视化woff文件

1.首先要把woff文件存成xml格式

python">from fontTools.ttLib import TTFont# 加载字体文件:font = TTFont('ami.woff')# 保存为xml文件:font.saveXML('local_fonts.xml')

2.利用网站查看

Iconfont Previewiconfont preview for web, Momo's Blog, LuckyMomoicon-default.png?t=N7T8https://blog.luckly-mjw.cn/tool-show/iconfont-preview/index.html

        通过这两步可以建立初始化的name与num列表

三、抓取一页建立woff中flag与数字之间的关系

1.利用可视化网站手动输出woff中name与数字的关系

python">r_map = {'unic543': 0, 'unib928': 1, 'unic193': 2, 'unib958': 3, 'unia257': 4, 'unic829': 5, 'unib716': 6, 'unic182': 7,'unic387': 8, 'unib718': 9}  # 数字映射字典

2.输出name与flag的关系

python">def base_font_map(woff):"""构造基本on数组映射模板"""ttobj = TTFont(woff)tt_names = ttobj.getGlyphNames()[1:]  # 获取所有name值cmap = {}for i in tt_names:cmap[tuple(ttobj['glyf'][i].flags)] =  i # 构造基本映射on数组模板return cmap
print(base_font_map('aim.woff'))

3.建立flag(on)与数字的关系

python">def on_num(on_name,name_num):onnum={}for key,value in on_name.items():onnum[key]=name_num[value]return onnum

四、处理一页response.data数据

python">def page_data(data,page_name_num): #data=每一页解析的data数据,page_name_num=每一页解析出的name与num的对应关系nums=[]for d_v in data:name_list=d_v['value'].replace('&#x','uni').split(' ')if name_list[-1]=='':name_list.pop()point=''for name in name_list:point+=str(page_name_num[name])nums.append(point)return nums

五、处理一页woff值中name与num的对应关系

python">def name_num(onnum,nameon):namenum={}for key,value in nameon.items():namenum[key]=onnum[value]return namenum

六、返回一页的point点

python">def page_point(page):url = f"https://match.yuanrenxue.cn/api/match/7?page={page}"response = requests.get(url, headers=headers, cookies=cookies).json()data = response['data']woff = response['woff']save_woff(woff, page)nameon = base_font_map(f'{page}.woff')namenum = name_num(onnum, nameon)page_point_list = page_data(data, namenum)return page_point_list

七、获取全部数据

python">def main(name_list):point_list = []for page in range(1, 6):point_list.extend(page_point(page))print(point_list)   print(max(point_list))print(name_list[point_list.index(max(point_list)) + 1])

最后有一点网页里名字的索引是从1开始的,所以point的最大值索引要+1才是名字的索引。


http://www.ppmy.cn/ops/33651.html

相关文章

报错ModuleNotFoundError: No module named ‘markupsafe‘

明明有这个模块却显示没找到先卸载再安装 pip uninstall markupsafe pip install markupsafe实在不行加上这句,应该是更新pip,但我运行报错了,重新安装还是相同的版本 pip install -U pip setuptools wheelYou are using an very, very old…

C++入门第二节--关键字、命名空间、输入输出

点赞关注不迷路!本节涉及c入门关键字、命名空间、输入输出... 1. C关键字 C总计63个关键字,C语言32个关键字 asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenamethrowcaseen…

写一个在创建css文件之后的初始化样式

创建CSS文件后,进行初始化样式是一个很好的做法,因为它可以消除不同浏览器之间的默认样式差异,使得页面在不同浏览器中表现得更一致。下面是一个简单的CSS初始化样式示例: css /* 初始化样式 */ /* 清除内外边距 */ * { mar…

分布式 ID 的实现方案——Java全栈知识(13)

分布式 ID 的实现方案 当我们分表的情况下,如何实现全局唯一 ID 也是一个问题,数据库的唯一索引在 分布式 ID 也就是全局唯一 ID 生产方案需要满足以下几个条件: 高可用高性能安全性自增性唯一性 1、UUID UUID(Universally Un…

【Python】使用seaborn包时为什么会用到matplotlib 包(Seaborn 和 Matplotlib的关系)

在使用 Seaborn 进行数据可视化时,经常会涉及到 Matplotlib 包,这是因为 Seaborn 是建立在 Matplotlib 上的一个高级绘图库。以下是几个关键原因说明为什么在使用 Seaborn 的过程中会用到 Matplotlib: 1. 基于 Matplotlib 构建 封装和简化&…

vue3——(模板应用,组件)

模板应用 Vue3 的模板应用和之前的版本基本一致,但是在一些关键点上有所不同。 Composition API Vue3 引入了 Composition API,这是一种全新的 API 设计风格,可以更好地组织代码,提高代码的复用性和可读性。与之前的 Options AP…

第11章 软件工程

这里写目录标题 1.软件过程1.1能力成熟度模型(CMM)1.2能力成熟度模型集成(CMMI)1.3瀑布模型(线性顺序)1.4增量模型1.5演化模型1.5.1原型模型1.5.2螺旋模型 1.6喷泉模型1.7统一过程(UP)模型 2.敏捷方法3.系统设计4.系统测试4.1单元测试(模块测试)4.2集成测试4.3黑盒测试(功能测试…

Mybatis框架

简介 MyBatis是一款优秀的持久层框架,它支持自定义SQL,存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。 入门 一、导…