利用Python快速提取字体子集

news2024/9/20 9:30:03
来自:Python大数据分析 费弗里

在我们日常进行数据可视化、web应用开发等场景中,经常会用到一些特殊的非系统自带字体,尤其是中文字体,由于包含的字符数量众多,因此体积一般都比较大,这在进行数据可视化读取字体文件,或是网页应用中通过网络加载字体文件时,就会带来更多的耗时。

而我们完全可以针对字体文件运用“按需引入”的思想,从原始的体积较大的全量字体文件中,根据我们实际使用到的文字范围,进行子集的提取,从而大幅度提升效率。

我们可以利用Python中的fonttools库来快捷实现此项需求,它由谷歌开源,自带了若干实用的字体处理相关命令行工具,使用pip install fonttools安装完成后,我们只需要按照下列格式执行命令行工具pyftsubset即可:

pyftsubset 原始字体文件路径 --text=需要保留的字符 --output-file=输出子集字体文件路径

而当我们需要进行保留的字符众多时,则可以通过书写Python脚本的方式,批量拼接命令行进行模拟执行:

import os
import re

# 读入目标文本内容
with open('./将进酒.txt', encoding='utf-8') as t:
    source_content = t.read()
    
# 模拟执行pyftsubset命令生成字体子集
os.system(
    'pyftsubset 钟齐志莽行书.ttf --text={} --output-file=钟齐志莽行书mini.ttf'.format(
        # 去除空白字符后去重
        ''.join(set(re.sub('\s', '', source_content)))
    )
)

通过上面的示例代码,我们从本地原体积为4698kb的字体文件中,提取出大小仅有76kb的目标子集字体文件:

在此基础上,我们就可以在项目中「大幅度」优化外部字体的使用效率 ,譬如下面的示例dash应用(相关源码及文件已上传至文章开头仓库):

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++当中的继承

在C当中继承是一个非常重要的语法。我们可以使用继承快速的进行代码的复用以及对代码进行扩展操作。首先我们来进行学习继承的基本语法。 (一)继承的语法方式 还记得我们之前学习的访问限定符吗?就是class里面的private,public&am…

直播间没有自然流,如何突破?

如果你的直播间完全没有自然流量,不用担心,有四种方法可以解决这个问题。 第一种方法是延长直播时长。如今的账号系统与以前不同,现在自然流量非常珍贵。以前,新账号即使没有数据,平台也会给一些流量,但现在…

校园管理新篇章:Spring Boot系统实现策略

第3章 系统分析 3.1 需求分析 校园管理系统主要是为了提高用户的工作效率和更方便快捷的满足用户,更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性,遵循开发的系…

jmeter设置全局token

1、创建setup线程,获取token的接口在所有线程中优先执行,确保后续线程可以拿到token 2、添加配置原件-Http信息头管理器,添加取样器-http请求 配置好接口路径,端口,前端传参数据,调试一下,保证获…

2024社群空间站全自动付费进群系统九块九进群源码

多种玩法:付费VIP玩法、同城行业群裂变玩法、全民K歌群裂变玩法、拼多多群玩法、VIP领取百度网盘资料玩法、单群付费玩法;

WTL580-电子锁微波雷达应用解决方案,5.8GHz精准人体感知,触发高效交互新体验

一、简介 随着智能电子门锁普及,电子门锁的市场也随着打开,安装智能化电子门锁也为大势所趋。现我司推出基于WTL580微波雷达的电子锁应用方案,通过检测门锁周围是有活动人体存在来激活门锁。我司WTL580微波雷达方案采用5.8GHz微米波雷达传感器…

mac系统安装最新(截止2024.9.13)Oracle JDK操作记录

文章目录 下载JDK22配置环境变量验证环境变量是否生效整体命令如下 下载JDK22 打开最新版Oracle JDK下载地址 选择想要安装的JDK版本,然后选择适合兼容Mac机器的版本(Intel/arm),建议直接下载安装程序,可视化安装 默…

栈的定义和基本操作的实现

写代码:定义顺序存储的栈(数组实现),数据元素是 int 型 写代码:基于上述定义,实现“出栈、入栈、判空、判满”四个基本操作 写代码:定义链式存储的栈(单链表实现) 写代…

零钱兑换二维dp实现(力扣--动态规划)

文章目录 1.题目描述2.解题思路3.代码实现 1.题目描述 题目链接:零钱兑换 2.解题思路 1.确定二维dp[i][j]的含义: dp[i][j] 前i个物品任取,装入容量为j的背包种,最少的硬币个数是dp[i][j] 2.确定递推公式: dp[i][j]…

【日语学习必备】5款超准实时翻译软件,让你的网课不再有障碍!

日语水平不过关,没办法实时听懂日语会议或日语网课内容怎么办? 两种方法! 一、利用日语实时翻译软件,也就是所谓同声传译的方式实时将日语转换为中文 二、先将会议或网课等内容录制下来,再借助语音或视频翻译软件&am…

利士策分享,探索无界:心灵之旅,发现未知精彩

利士策分享,探索无界:心灵之旅,发现未知精彩 梦想的种子,在心田生根发芽 正如每一颗种子都蕴含着生命的奥秘,每个人心中那颗探索的种子,也藏着对未知世界的渴望与追求。它告诉我们,成长不仅仅…

Unite Shanghai 2024 技术专场 | Unity 6及未来规划:Unity引擎和服务路线图

在 2024 年 7 月 24 日的 Unite Shanghai 2024 技术专场演讲中,Unity 高级技术产品经理 Jeff Riesenmy 带来演讲 Unity 6 and Beyond: A Roadmap of Unity Engine and Services。作为本次 Unite 首场专题演讲,他介绍了 Unity 引擎的最新进展及其配套的工…

猫头虎分享:15种数码苹果16抢购攻略

猫头虎分享:15种数码苹果16抢购攻略 大家好,我是猫头虎!今晚8点,就是大家期待已久的苹果16抢购时刻,你准备好了吗?为了帮助大家顺利抢到心仪的机型,我精心准备了15种抢购指南,总有一…

[C#学习笔记]LINQ

视频地址:LINQ入门示例及新手常犯的错误_哔哩哔哩_bilibili 强烈推荐学习C#和WPF的朋友关注此UP,知识点巨多,讲解透彻! 一、基本概念 语言集成查询(Language-Intergrated Query) 常见用途 .Net原生集合(List,Arra…

“勇者斗恶龙”即将上演,乐道L60剑指Model Y

文/王俣祺 导语:只要说到“二十多万”“大品牌”“纯电SUV”这一系列关键词,特斯拉Model Y一定是绕不开的车型,从近几年的销量来看,目前市面上很难有车型能“硬刚”。不过既然有“恶龙”就会有“勇者”,蔚来子品牌乐道…

“薅羊毛”时间到, 容声以旧换新“钜惠”升级

9月13日,由佛山市商务局、顺德区人民政府指导,海信家电集团主办的以旧换新佛山发布活动启幕。 海信家电(SZ 000921,HK 00921)旗下容声冰箱叠加国家以旧换新补贴,把“以旧换新”升级到“品质换新”&#xf…

汤臣倍健业绩大幅下滑:经销商减少131家,销售费用转化不达预期

《港湾商业观察》廖紫雯 在膳食营养补充剂(VDS)行业竞争加剧的情况下,日前,汤臣倍健股份有限公司(以下简称:汤臣倍健,300146.SZ)披露2024年半年报业绩情况。上半年,公司…

爱普生相机SD卡格式化后数据恢复指南

我借了朋友的‌爱普生相机,想查看一下内存,哎呀,一不小心按错了,竟然执行了格式化操作,这可真是太让人郁闷了,这还有机会挽救数据吗?心塞,求帮助! 随着数码摄影的普及&am…

GUI编程10:窗口监听事件

视频链接:12、窗口监听事件_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p12&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.使用成员内部类方式实现窗口监听 ackage com.yundait.lesson03;import java.awt.*; import java.awt.event.Win…

学习之git的团队协作

git团队协作 一 团队内协作 生成SSH公钥私钥 一(跨团队协作)