首页 > 其他分享 >使用fontforge进行字体拆分

使用fontforge进行字体拆分

时间:2023-08-17 20:33:58浏览次数:34  
标签:main 拆分 char fontforge base 字体 file font

fontforge官方网站

游戏开发为了节省内存和资源下载量,需要把字体不用的字删掉,或者拆成多个字体逐级加载,批量操作用UI就比较难搞了,用fontforge搞起来比较顺手

安装fontforge后即可通过脚本代码批量进行操作,使用相对熟悉一点的python脚本,官方文档

首先写一个powershell脚本来启动并传递一些参数

$fontforge = ".../fontforge/bin/fontforge.exe" # fontforge的安装路径
$argumentList = "-script ./main.py ""extra arguments"""
Start-Process -File $fontforge -ArgumentList $argumentList -NoNewWindow

如果不需要传递额外参数(给别人用或者加个UI包装一下等),可以直接调用

.../fontforge/bin/fontforge.exe -script ./main.py

例:选取指定的字符,导出一个新字体

# main.py

input_file = "full_font.ttf" # 全量字体
output_file = "base_font.ttf" # 基础字符集
used_unicodes = {} # 读取用到的字表,自己通过ord()函数转一下

font = fontforge.open(input_file)
for char_name in font:
    glyph = font[char_name]
    unicode = glyph.unicode
    if unicode in used_unicodes:
        # 保留的字符
    else:
        # 这里假设单个glyph没有被多个unicode使用,如果需要相应处理,过滤一下
        glyph.clear()

font.generate(outout_file)
font.close()

例:把全量字体拆分为A和B

#main.py

input_file = "full_font.ttf" # 全量字体
base_file = "base_font.ttf" # 基础字符集
extra_file = "extra_font.ttf" # 增量字符集
base_char_names = []

def load_base_char_names():
    font = fontforge.open(input_file)
    for char_name in font:
        base_char_names.append(char_name)
    font.close()

def generate_extra_font():
    font = fontforge.open(input_file)
    for char_name in base_char_names:
        glyph = font[char_name]
        glyph.clear()
    font.generate(extra_file)
    font.close()

def main():
    load_base_char_names()
    generate_new_font()

main()

标签:main,拆分,char,fontforge,base,字体,file,font
From: https://www.cnblogs.com/lunoctis/p/17638779.html

相关文章

  • 《VS篇》vs2008设置字体大小
    参考链接:https://www.nnbkzf.com/595435.html1、首先打开电脑,进入到vs2008软件中。2、在上方的菜单栏中选择工具栏下的找到“选项”,点击进入下一页面。3、点击后,会弹出控制板面板的对话框,如下图所示。4、在弹出的对话框中,选择字体和颜色,这样就可以修改字体的大小了。5、......
  • 长文本拆分
    长文本拆分TL;DR企业微信消息长度限制为2048个字节,字符长度不等于字节长度使用字节拆分,会导致中文字符被截断使用文本+字节拆分,无法处理emoji表情使用unicode字符拆分,即可解决以上问题先前在做企业微信的应用接入ChatGPT时遇到一个问题,就是企业微信的消息长度限制为2048......
  • 数字的拆分之一
    #Description将数字N分成2份以上.使用的数字不可重复.例如5=1+4=2+3,就只有两种拆分的方式.#Format##Input每一行给出一个数字N3<=N<=500整个测试以0代表结束.##Output输出有多行,每行一个数字,代表拆分的种数#Samples```input1350``````output112......
  • 使用控制台打印显示点阵字体库HZK24、ASC24
    1.创建codeblocks工程。  加入字库文件:https://files.cnblogs.com/files/blogs/799931/font.7z?t=1692239003&download=true2.编辑代码:intmain(void){FILE*fphzk=NULL;FILE*fpASC24=NULL;inti,j,k,offset;intflag;unsignedcha......
  • vue引入外部字体
    1.下载字体包2.将字体包放在资源目录src/assets/font下3.创建字体css文件夹src/assets/fontcss,创建字体css文件并引入字体包/*注意:font-family:'XXX';将字体名字自定义为XXX,使用时要用这个名字*/@font-face{font-family:'myFont';src:url('../font/Not......
  • Vue3 setup的业务逻辑分离功能拆分
    在Vue3开发中,我们可能遇到一个页面或者组件业务逻辑很复杂,代码量达到千行,不利于阅读和维护,因此需要将业务逻辑进行分离首页主界面index.vue//index.vue<script>import{reactive,toRefs}from'vue'importuseOperatefrom'./useOperate.js'importuseConfi......
  • LeetCode 139.单词拆分
    1.题目:给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例1:输入:s="leetcode",wordDict=["leet","code"]输出:true解释:返回tr......
  • 练习四:鎏金字体
    这里用到一个插件:EyeCandy7(PS插件:ExposureSoftwareEyeCandyv7.2.3.176可快速模拟生成金属、毛发、火、烟雾等效果(Win&Mac)-捡屁笑的小站(jpsmile.com))下载好后关闭ps(注意,ps要是安装版的,便携版的添加插件我也不会搞),双击安装,选择目录为ps的安装目录的Plug-ins文件夹......
  • 某公司笔试题 - 字符串拆分(附python代码)
    #输入一个字符串,请按长度为8拆分每个输入字符串并进行输出#长度不是8整数倍的字符串请在后面补数字0,空字符串不处理str=input("请输入一个字符串:")#字符串长度1~7时,输出字符串并用0补齐8位iflen(str)<8andlen(str)>0:print(str+'0'*(8-len(str)))#当字符串的长......
  • ImageDraw.Draw(image).text()方法,想要在图像的中间添加 error,字体大小占据图像尺寸一
    要在图像的中间添加文本,并且确保文本大小占据图像尺寸的一半,你可以使用Python的PIL库(Pillow)中的ImageDraw和ImageFont模块来实现。以下是一个示例代码,演示了如何在图像中心添加文本并设置字体大小:fromPILimportImage,ImageDraw,ImageFont#创建一个空白图像width=400h......