压缩字体包的经验教程

压缩微信小程序字体包的经验教程

最近在我的微信小程序项目中,我遇到了一个问题:由于使用了自定义的字体包,整个字体文件接近 5M,导致放在 OSS 存储中时产生了较高的成本。为了节省开支,我决定对字体包进行压缩处理。然而,由于项目已经上线,我目前只能继续使用 TTF 格式的字体包,但在下次上线时,我计划使用更小的字体格式(如 WOFF2)以进一步减少文件大小。

我会上传一个现代汉语常用3500字的txt文件。

问题背景

在小程序中使用自定义字体包是为了保持 UI 的一致性和美观性。然而,字体文件过大不仅增加了加载时间,还增加了存储成本。因此,我希望通过压缩字体文件的方式,在不影响用户体验的前提下减小文件大小。

解决方案:子集化字体

由于我们并不会在项目中使用所有的字体字符,我决定使用 字体子集化 技术来减少文件大小。这种方法可以提取出我们实际在项目中用到的字符,并生成一个子集字体文件,只保留所需字符。

工具选择:Fontmin

经过一番调研,我选择了 Fontmin 作为字体子集化工具。Fontmin 是一个基于 Node.js 的工具,可以轻松地提取并压缩字体文件。

步骤详解
  1. 安装 Node.js 和 Fontmin

    首先,确保本地安装了 Node.js,然后全局安装 Fontmin:

    npm install fontmin -g
    
  2. 创建字体子集化脚本

    在项目目录下创建一个 fontmin.js 脚本,并编写如下代码:

    const Fontmin = require('fontmin');
    const fs = require('fs');
    
    // 设置字体文件路径和输出路径
    const fontPath = 'D:/path/to/your/font.ttf';  // 使用绝对路径
    const outputPath = './output';  // 输出文件夹路径
    const textFilePath = './unique_characters.txt';  // 提取出的字符文件路径
    
    // 读取 unique_characters.txt 文件中的字符
    const text = fs.readFileSync(textFilePath, 'utf8');
    
    // 创建 Fontmin 实例
    const fontmin = new Fontmin()
        .src(fontPath)  // 输入字体文件
        .use(Fontmin.glyph({ text }))  // 提取所需字符子集
        .dest(outputPath);  // 输出到指定文件夹
    
    // 执行字体子集化
    fontmin.run(function (err, files) {
        if (err) {
            console.error(err);
        } else {
            console.log('TTF 字体子集化成功!');
        }
    });
    
  3. 执行脚本

    在终端中运行该脚本:

    node fontmin.js
    

    这将会生成一个子集化的 TTF 字体文件,保存在 output 文件夹中。

遇到的问题及解决
  1. 中文路径问题:我遇到的一个问题是路径中包含中文字符时,Fontmin 无法正确处理。因此,建议在路径中尽量避免使用中文字符。如果必须使用,可以尝试将路径转换为绝对路径。

  2. 只能使用 TTF 格式:由于项目已上线,我只能暂时使用 TTF 格式,无法切换到更小的字体格式如 WOFF2。不过,计划在下次版本更新时,将字体格式转为 WOFF2 以进一步减小文件大小。

总结

通过子集化字体文件,我成功地将 5M 的字体包压缩到了一个较小的体积,节省了存储成本,并且保证了小程序的加载速度和用户体验。如果你也遇到了类似的问题,可以考虑使用 Fontmin 进行字体子集化,这是一种简单有效的优化方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值