当前位置: 首页 > article >正文

前端html字体包体积压缩,网站工程下字体压缩裁剪工具

整个网站项目如果字体包体积太大就会影响其加载速度字体加载完会让页面字体突然变换。做一个工具他会自动检索网站上所有展现给用户的字符然后原地裁剪字体。来解决这个问题。实现效果如下执行py文件以后在网站字体文件所在目录下出现字体文件名称上加“mini”两个字的woff2后缀的字体文件如果网站内容更新了重新执行以下这个py文件会重新生成woff2文件无需改css引用代码直接生效。关键python代码如下import os import glob from fontTools.subset import main as pyftsubset_main import tempfile # 常用字符包含了英文字母、数字、常见标点符号 COMMON_CHARS 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!\#$%()*,-./:;?[\]^_{|}~·—……。、‘’“”〔〕【】——…·%……*¥↑→↓㎡一二三四五六七八九十百千万亿零壹贰叁肆伍陆柒捌玖拾佰仟万亿零的一是了我不人在他有这个上到来要们以会能要出就那和要也得你都着下自可子说去对年同工个啊阿爱安按暗八把爸白百败班办半帮包保报北被本比边别并病不步部擦猜才材财采彩菜参草策查差产长常厂场唱车成吃出川传船床春此从村大代带单但党到道得的等低第地第点电店定东冬懂动都斗独读对队多儿二发法反方非分风夫父干刚高个给更工公共够古瓜关观管光广国过海含函好号合和河很红后候花化画话坏欢环回会火及几己家间见叫教节介今尽进经精九就军开看可空口块快来兰老乐类里理力立利两亮量了林灵六路旅率妈吗买满毛么没每美门们米面民名么母木目那南内能你年鸟牛女欧怕排片品平七起气千前强亲青清情请全让人日三山上少社深什生师十时食使世市事手受书数水说思四送诉算岁他所太谈特提体天听同头土外完玩晚万王为文问我无五西习洗下先现相想向小校些心新信星性休学血眼阳要也业一医以因应永用有友又于余雨语元原远院月云再在早造则怎增展站张长找这真正政只知植直中种重主住抓转装子自总走租作坐做飞利浦影音京东自营店格乐飞甘尼克史达德雅培健康蒲地蓝龙角散纪梵希沁源专营星瑞海外博朗快手抖音厨电电器拼多多官方健安喜澳佳宝阿里猫超钙尔奇善存迈胜皇家怡式比乐金馨稳赛必健创国觅籍安蒂花子唯品会博世血糖仪照明智能家居美舒律雅赞工业品橙致奥特莱斯佳思敏营养亚马逊固益素金蓓高煊楷虔奉全屋智能皖焰轩耐皖梦优凯图芮好尹来途芮冠升妙朵焰名杰逸护眼办公家装建材集成吊顶电工灯具轩适家居郡典轩诚筑斐冠旭吉祥森宝上海金普突锐家居电气时尚灯饰生活电器品牌全安素妮飘维诗朵零公里雀巢依云碧然德伊利力度伸拜耳自然之宝城市超市舒尔欧舒丹帮宝适贝德玛星巴克健美生嘉宝美赞臣蓝臻夏日纷马迭尔护博士海普诺凯花王须尽欢西铁城飞鹤爱本凯伍德嘉士伯净水禾泱泱视觉旗舰 # 需要扫描的文件后缀 SCAN_EXTENSIONS {.html, .vue, .ts, .js, .css} # 需要扫描的字体文件后缀 FONT_EXTENSIONS {.otf, .ttf, .woff, .woff2} # 需要排除扫描的目录避免扫描依赖包和构建产物 EXCLUDE_DIRS {node_modules, dist, .git, .vscode, .joycode} def get_all_chars_from_files(directory): chars set() for root, dirs, files in os.walk(directory): # 排除不需要扫描的目录 dirs[:] [d for d in dirs if d not in EXCLUDE_DIRS] for file in files: ext os.path.splitext(file)[1].lower() if ext in SCAN_EXTENSIONS: filepath os.path.join(root, file) try: with open(filepath, r, encodingutf-8) as f: content f.read() # 把文件里的所有字符都加进去这种方式最稳妥不会漏掉通过JS拼接、innerHTML、CSS content等方式渲染的字符 chars.update(content) except Exception as e: print(f读取文件失败已跳过: {filepath}, 错误: {e}) return chars def find_font_files(directory): font_files [] for root, dirs, files in os.walk(directory): dirs[:] [d for d in dirs if d not in EXCLUDE_DIRS] for file in files: ext os.path.splitext(file)[1].lower() if ext in FONT_EXTENSIONS: font_files.append(os.path.join(root, file)) return font_files def main(): print(1. 正在检索前端工程文件提取页面字符...) project_dir os.path.abspath(.) scanned_chars get_all_chars_from_files(project_dir) print(2. 正在合并网站提取字符和内置常用字符...) all_chars_set scanned_chars.union(set(COMMON_CHARS)) print(3. 正在对字符进行去重并清理不可见字符...) # 去除换行符等不可见的控制字符保留正常可见字符 clean_chars [c for c in all_chars_set if c.isprintable() and not c.isspace()] clean_chars.append( ) # 确保包含空格 final_text .join(clean_chars) print(f- 最终提取并去重得到 {len(final_text)} 个唯一字符。) print(4. 正在检索工程中的字体文件...) fonts find_font_files(project_dir) if not fonts: print(未找到任何字体文件 (otf, ttf, woff, woff2)。) return for font in fonts: print(f- 找到字体文件: {font}) print(5. 正在裁剪字体文件并生成新的 woff2 文件...) # 将需要保留的字符写入临时 txt 文件以避免命令行参数过长或特殊字符引起解析错误 with tempfile.NamedTemporaryFile(w, encodingutf-8, deleteFalse) as f: f.write(final_text) temp_txt_path f.name try: for font in fonts: # 跳过名字里带 mini 的文件防止重复裁剪 if mini in os.path.basename(font): print(f跳过已裁剪的字体: {font}) continue dir_name os.path.dirname(font) base_name os.path.splitext(os.path.basename(font))[0] # 拼接新文件名加上 mini 后缀 out_font os.path.join(dir_name, f{base_name}mini.woff2) print(f正在裁剪: {font} - {out_font}) # 使用 fonttools 的 pyftsubset 进行裁剪 # 参数说明输入字体--text-file 指定包含所有字符的文件--output-file 指定输出--flavorwoff2 输出网页最优格式 args [ font, f--text-file{temp_txt_path}, f--output-file{out_font}, --flavorwoff2 ] try: pyftsubset_main(args) print(f [成功] 生成精简字体: {out_font}) except Exception as e: print(f [失败] 裁剪 {font} 时出错: {e}) finally: # 清理临时文件 if os.path.exists(temp_txt_path): os.remove(temp_txt_path) print(所有字体裁剪任务完成) if __name__ __main__: main()

相关文章:

前端html字体包体积压缩,网站工程下字体压缩裁剪工具

整个网站项目如果字体包体积太大就会影响其加载速度,字体加载完会让页面字体突然变换。做一个工具他会自动检索网站上所有展现给用户的字符,然后原地裁剪字体。来解决这个问题。实现效果如下: 执行py文件以后,在网站字体文件所在目…...

AI Infra 后端开发工程师 — 学习路线

AI Infra 后端开发工程师 — 学习路线目标:3个月可切换到AI Infra后端岗位能力迁移地图AI Infra 对应迁移成本Goroutine调度/并发控制思维直接复用Agent会话生命周期管理设计模式相同SSE/WebSocket流式协议实时系统思维GPU显存管理/KV-cache资源约束优化思维推理延迟…...

厂二代接班创业和继承怎么选择

在家族企业传承的大背景下,厂二代面临着接班创业和继承家业的艰难抉择。据统计,民企二代接班成功率不足 30%,这凸显了传承过程中的挑战与风险。上海章动企业咨询有限公司作为企二代、厂二代接班传承管理咨询的可信渠道,在这方面有…...

2026 大模型企业画像梳理技术解析:混乱画像规范方法深度测评

引言随着 AI 搜索成为商业信息获取的主要渠道,大模型生成的企业画像准确性直接影响企业品牌形象和获客效果。据中国 GEO 行业协会 2026 年调研数据显示,超过 76% 的企业反映大模型生成的企业画像存在信息混乱、错误遗漏、业务不匹配等问题,其…...

别再重复造轮子了!这个开源论坛小程序(Java+Uniapp)一套代码搞定 App/小程序/H5/PC,私域流量神器

你是否有过这些想法? 我想做个类似“知识星球”的圈子小程序,但外包报价动辄 5 万起…… 公司要做私域社区,需要同时支持微信小程序和 App,难道要养两个开发团队? 想靠“付费帖子 会员 打赏”变现,去哪…...

1688代采系统开发避坑指南:经验之谈

做跨境代购系统三年了,技术栈换过一次。今天把当初的技术选型过程和踩坑经验整理出来。多页面架构(MPA)的选择:没有用 React/Vue SPA 做租户端前台的首页和商品页,而是传统的多页面(HTML JS jQuery&#…...

为什么越来越多公司坚持做背调?

很多中小企业都有一个误区:觉得背调“可有可无”、浪费时间、增加成本。但真实职场现状是:不做背调,才是企业最大的隐形成本。现在求职简历美化早已是常态,履历注水、项目造假、隐瞒纠纷、失信记录……肉眼面试根本看不出来。一次…...

用 TLA+ 形式化验证 Harness 的并发安全性

从零到一:用TLA+形式化验证Harness CI/CD平台的并发操作安全性 副标题:解决分布式环境下流水线执行、资源抢占、状态一致性的核心痛点 摘要/引言 如果你是云原生团队的开发或运维工程师,大概率遇到过这样的场景:两个生产部署流水线同时触发,同时抢占同一个K8s集群的环境…...

糖尿病风险预测系统:机器学习算法对比与区块链边缘计算架构实践

1. 项目概述与核心价值在慢性病管理领域,尤其是糖尿病防控,早期预警和精准风险评估是降低发病率和医疗负担的关键。传统的风险评估多依赖于医生经验和简单的问卷,难以处理多维度、非线性的复杂风险因素关联。近年来,以机器学习为代…...

C 语言自定义类型:结构体、位段、联合体、枚举

struct:成员并排,空间叠加位段:struct 里按 bit 分配,极致省空间union:成员重叠,空间共享enum:有限常量,替代宏,更安全一、结构体 struct:成员并排&#xff0…...

海思Hi3516CV608×PSRAM|AI全彩IPC黄金硬件方案

一、海思Hi3516CV608核心应用特性(AI全彩IPC主力主控)芯片原生内置512Mbit DDR2,满足系统运行、视频编码、基础ISP图像处理,硬件资源稳定可靠。集成硬件NPU(0.2TOPS),原生支持人形检测、越界侦测…...

大模型写论文,“文献”全是瞎编的?为什么大模型爱编参考文献?如何确保文献的真实性

一、引言:当AI开始“编文献” 随着大语言模型(如 GPT-4、DeepSeek、Claude 等)在学术写作、文献综述、技术调研中的普及,一个隐蔽但危险的问题逐渐暴露出来——文献幻觉(Citation Hallucination)。 你可能…...

拒绝盲从:从“上岸村”公考笔试机构推荐谈个性化备考路径

2026 年公考竞争持续升温,国考报名人数再创新高,考生群体日趋多元,需求正从 “有没有课上” 转向 “课程适配性与教学实效性”。行业正告别粗放式扩张,精细化深耕、价值化回归、场景化适配成为新的发展主线。在此背景下&#xff0…...

什么是vibe coding:概念解析与首选工具Trae实测

什么是vibe coding:概念解析与首选工具Trae实测你是否好奇vibe coding到底是什么,为何能成为2025年最火的开发方式?是否想知道vibe coding和传统编程的核心差异,以及用什么工具能高效落地?vibe coding是提示词驱动开发…...

工业IoT实战:边缘计算+AI在电机预测性维护中的系统架构设计

前言工业物联网(IIoT)场景下,预测性维护(Predictive Maintenance)是AI技术落地价值最明确的方向之一。本文以杭州沃伦森(WARENSEN)电气的AIESA电机智能安康系统为案例,分析其在边缘计…...

天勤 get_account 资金字段读懂:下单前可用与保证金检查

前言 策略信号对了却下不出去,我第一反应看 get_account():是 available 不够,还是把 balance 当可用去和保证金比了。有次模拟盘「明明没下单」却报资金不足,查了半天是字段读错;还有一次夜盘加仓,白天算好…...

金融数据宝藏库:沪深Level2与高频数据拆解

被高频数据搞懵了?硬盘空间就是这么没的。刚入坑那会儿,总想用最细的数据,结果光下载和整理就耗掉大半天,策略还没写呢。 今天简单聊聊几种常见的高频数据到底有啥区别,主要是沪深股票这块。数据来源是CMES金融数据库&…...

解锁 AI 新用法:2026 普通人办事效率翻倍实战指南

2026 年 5 月 22 日,国产 AI 大模型周调用量连续两周领跑全球,智能体(Agent)技术从概念落地为全民工具,AI 正从 “科技圈热词” 彻底变成普通人的 “效率外挂”。当下,文心一言 5.1、DeepSeek V4 等国产模型…...

从 @Tool 装饰器到 MCP,浅析大模型工具生态与 Function Calling 的底层逻辑

从 Tool 装饰器到 MCP,浅析大模型工具生态与 Function Calling 的底层逻辑 在开发 LLM Agent(大模型智能体)时,我们经常会遇到各种层出不穷的技术名词:Function Calling(函数调用)、JSON Schema…...

机器学习---监督学习入门实验全攻略(小白友好版)

新晋码农一枚,小编会定期整理一些写的比较好的代码和知识点,作为自己的学习笔记,试着做一下批注和补充,转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!…...

矩池云实战: 用Gemma 4 + Open WebUI打造你的私人OpenAI

在开源 AI 生态中,如何不依赖闭源 API,纯靠开源堆栈搭建出一套具备“深度思考(CoT)&原生多模态顶配开发环境? 答案是:Ollama Gemma-4-31B Open WebUI Ollama Gemma-4-31B Open WebUI 的真正核心价…...

架构测试方法体系:覆盖、验证与CHAM动态语义分析

一、引言:架构测试的三维框架 架构测试的独特挑战在于:它不仅要验证系统"做得对不对",更要验证"设计得对不对"。传统测试方法聚焦于代码层面的功能正确性,而架构测试关注的是结构合理性、组件交互正确性以及质量属性可达性。 根据测试目标的不同,架…...

2026年国内镜像站选择指南:一站接入GPT-5.5和主流AI模型

先交代一下背景。2026年的大模型格局已经变了——GPT-5.5、Claude、Gemini、Grok 各有各的强项,做项目的时候经常需要这个模型写代码、那个模型分析文档、再来一个做联网搜索。但问题是,国内想用上这些模型,光解决"能访问"就已经够…...

NotebookLM关键词提取结果不一致?权威测试报告揭示模型版本、文档编码、上下文窗口三重耦合陷阱

更多请点击: https://kaifayun.com 第一章:NotebookLM关键词提取 NotebookLM 是 Google 推出的基于用户文档构建的 AI 助手,其核心能力之一是自动从上传的文本中识别并提取关键语义单元——即关键词(Keywords)。这些关…...

AI智能体安全防御:从代码数据分离到多代理系统架构实践

1. 项目概述:当AI智能体成为攻击目标 最近和几个做AI应用落地的朋友聊天,大家不约而同地提到了同一个焦虑:模型能力越强,系统越复杂,心里反而越没底。一个能自主调用API、处理文件、联网搜索的智能体,一旦被…...

如何让抓取手机日志---ADB 从入门到实战:小米14日志抓包与连接详解

一、ADB 是什么? ADB 的全称是 Android Debug Bridge(安卓调试桥)。顾名思义,它就像一座桥梁,连接你的电脑和安卓手机。 Debug(调试):它的核心用途是帮助开发者调试应用、分析问题。…...

第一性原理缺陷计算准备:以氢掺杂氧化镓为例的VASP实践指南

1. 项目概述:从“掺杂”到“缺陷”的计算准备在半导体材料研究领域,尤其是宽禁带半导体,对材料进行掺杂以调控其电学、光学性质是核心课题之一。氧化镓(Ga2O3)作为一种新兴的超宽禁带半导体,因其在功率电子…...

智能电表:解锁智能照明精细化能耗管控新密码

摘要随着双碳政策深度落地与智慧楼宇数字化升级,智能照明已成为商业园区、市政道路、综合体的标配设施。传统机械式电表仅具备基础电量统计功能,存在数据滞后、精度不足、无分区计量、无异常监测等短板,无法适配现代照明多回路、多场景、长时…...

AI 大模型未来技术演进方向与应用发展趋势预判

引言:AI 技术快速迭代,未来已来AI 大模型技术正以超乎想象的速度迭代演进,从参数规模扩张到能力提升、从技术架构创新到应用场景拓展、从成本高企到普惠落地,每一次技术突破都在重塑产业格局、改变商业逻辑、影响生活方式。2026 年…...

中关村、首体院、京奥电竞三方签约,共探AI+电竞产学研一体化突破

AI电竞:三方签约开启产学研新篇在今日的大会上,中关村人工智能研究院、首都体育学院、京奥电竞(北京)科技有限公司举行了一场重量级的三方签约。中关村人工智能研究院专注于具有产业价值和颠覆意义的人工智能与交叉学科领域探索&a…...