《ttf字体瘦身/裁剪/删减 》 适合微信小游戏/小程序/游戏开发

游戏开发过程中经常会碰到美术给的ttf字体太大,他们又不会压缩和裁剪,而我们客户端对资源的大小非常敏感。尤其是发布小游戏的时候,一个ttf大小10M 你敢想象?

为此我开发了一个小小的工具,专门处理这种问题

giteed地址:gitee地址

就一个简单的js脚本,希望能帮到需要的人

const fs = require('fs');
const Fontmin = require('fontmin');
const path = require('path');

//输入目录,支持多个
const inputdir = "font"
//输出目录
const outputdir = "out"
//保留的字符目录, 支持多个txt文件
const includeddir = "included"

function start() {

    //递归查找所有待瘦身的ttf字体
    let ttfs = findFileSync(inputdir, '.ttf');

    //递归查找所有配置的保留字符
    let included_texts = findFileSync(includeddir, '.txt');

    //合并字符
    let chars = "";
    included_texts.forEach(file => {
        const str = fs.readFileSync(file, 'utf-8');
        chars += str;
    });

    //开始处理ttf字体
    for (let i = 0; i < ttfs.length; i++) {
        let f_name = path.basename(ttfs[i])
        new Fontmin()
            .src(ttfs[i])
            .use(Fontmin.glyph({ text: chars })) // 子集化字体
            .dest(outputdir)
            .run((err,files)=>{
                if(err == null){
                    console.log("success = > " + f_name)
                }else{
                    console.error(err);
                }
            })
    }
}

start();


function findFileSync(directoryPath, suffix) {
    const _files = [];
    try {
        const files = fs.readdirSync(directoryPath);

        files.forEach(file => {
            const filePath = path.join(directoryPath, file);
            const stats = fs.statSync(filePath);

            if (stats.isFile() && path.extname(filePath).toLowerCase() === suffix) {
                _files.push(filePath);
            } else if (stats.isDirectory()) {
                const subTTFFiles = findFileSync(filePath, suffix);
                _files.push(...subTTFFiles);
            }
        });
    } catch (error) {
        console.error('Error reading directory:', error);
    }
    return _files;
}

运行环境准备:

1.安装node

2.安装node库, fs,fontmin,path

3.运行 node ./handler.js  即可

注意:

1.需要保留的字符以txt的形式放在 included文件夹中即可。这里我在网上找了3000个常用的中文汉字和字母数字常用符号等。希望压缩的更小的话可以自行配置

如果帮到你了,辛苦点个赞

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值