使用fontforge精简字体文件

为什么用FontForge

因为它是开源免费的,而且项目中我只需要精简字体文件,或者增删个别字形,没有更深层次的需求;

FontForge精简字体文件脚本

这个是核心,用的原生脚本,也就是pe文件,你也可以自行改成python文件,我不会python;代码简单,主要就是传入字符的整型值,如果是-连接的就是范围型选择,否则是单个选择,然后反选,删除自行,再生成新的字体文件(这里可能不会覆盖同名文件,没测试)。

#调用命令样例: "C:\Program Files (x86)\FontForgeBuilds\bin\fontforge.exe" -script C:\Users\Mike\Documents\FontCut.pe C:\Users\Mike\Documents\Volv-Bold.ttf 65-90 128

if($argc <= 2)
	Print("no enough args!")
	return(0)
endif

argCnt=$argc - 2
totalArray=Array(argCnt)
index=2
while(index < $argc)
	str = StrSplit($argv[index], "-", 2)
	strCnt = SizeOf(str)
	tmpArr = Array(strCnt)
	if(strCnt > 0)
		tmpArr[0] = Strtol(str[0])
	endif

	if(strCnt > 1)
		tmpArr[1] = Strtol(str[1])
	endif
	
	totalArray[index - 2] = tmpArr
	++index
endloop

Open($1)
Reencode("unicode")

totalSize = SizeOf(totalArray)
index = 0
while(index < totalSize)
	tmpArr = totalArray[index]
	tmpCnt = SizeOf(tmpArr)
	if(tmpCnt > 1)
		SelectMore(tmpArr[0], tmpArr[1])
	elseif(tmpCnt > 0)
		SelectMore(tmpArr[0])
	endif
	++index
endloop

SelectInvert()
DetachAndRemoveGlyphs()
UnlinkReference()
Generate("NewOutputFont.ttf")
Clear()
Close()

Unity中调用cmd执行上述脚本

调用cmd代码:

private void CutFont()
{
	var arg = GetArguments();
	
	ProcessStartInfo psInfo = new ProcessStartInfo("cmd.exe");
	psInfo.CreateNoWindow = true;
	psInfo.UseShellExecute = false;
	psInfo.RedirectStandardError = true;
	psInfo.RedirectStandardInput = true;
	psInfo.RedirectStandardOutput = true;
	psInfo.ErrorDialog = true;
	psInfo.Arguments = string.Format("/k {0}", arg);
	psInfo.StandardOutputEncoding = Encoding.UTF8;
	psInfo.StandardErrorEncoding = Encoding.UTF8;

	Process ps = Process.Start(psInfo);
	//不可使用writeline的方式,输入的命令会被解析为乱码,用上面/k的方式
	// ps.StandardInput.WriteLine("ln");
	ps.StandardInput.AutoFlush = true;
	ps.WaitForExit();
	if (ps.ExitCode == 0)
	{
		Debug.Log("处理成功,请查看处理后字体文件,并进行改名等后续处理. 路径:" + outputPath + "/NewOutputFont.ttf");
	}
	else
	{
		Debug.Log(ps.StandardOutput.ReadToEnd());
	}

	ps.Close();
}

构造参数代码:

private string GetArguments()
{
	var result = new StringBuilder();
	//fontforge脚本无法指定路径generate,所以先cd到输出目录
	result.Append(string.Format("cd \"{0}\" && ", outputPath));
	//加入fontforge执行程序路径
	result.Append(string.Format("\"{0}\" -script", FontForgeRootPath + "/bin/fontforge.exe"));
	result.Append(" ");
	//添加精简脚本位置参数, 为防止路径有空格,需要用双引号括起来
	result.Append(string.Format("\"{0}\"", scriptPath));
	result.Append(" ");
	//添加源字体文件位置
	result.Append(string.Format("\"{0}\"", sourceFontPath));
	result.Append(" ");
	//添加字符参数
	foreach (var characterPair in _keepCharacters)
	{
		if (characterPair.Length > 1)
		{
			result.Append((int)characterPair[0] + "-" + (int)characterPair[1]);
		}else
		{
			result.Append((int)characterPair[0]);
		}

		result.Append(" ");
	}
	//最后加上退出代码
	result.Append("&& exit");
	return result.ToString();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用FontForge创建一个供他人安装的字体,请照以下步骤进行操作: 1. 安装FontForge:首先,下载并安装FontForge字体设计软件。你可以从FontForge官方网站(https://fontforge.org)上获取最新版本。 2. 打开字体文件:在FontForge中打开一个空白字体文件或现有的字体文件,以便进行编辑和设计。 3. 设计字形:使用FontForge的工具和功能来创建字形。你可以绘制或导入字形轮廓,调整字形的大小和比例,设置字形间距等。 4. 编辑字体属性:在FontForge中,你可以设置字体的元数据和属性,例如字体名称、版权信息、许可证等。确保提供准确的信息以符合相关法律和规定。 5. 导出字体文件:完成字体设计后,将字体导出为常见的字体文件格式,如TrueType (.ttf)或OpenType (.otf)。在FontForge中,你可以使用文件”菜单中的“导出”选项来完成此操作。 6. 测试和优化:在导出字体之前,使用FontForge提供的预览功能来测试和调整字体的显示效果。确保字形在不同大小和分辨率下都呈现出良好的质量。 7. 分发字体:将导出的字体文件分享给其他人使用。你可以通过将字体文件上传到网站、应用商店或通过电子邮件发送给需要的人来分发字体。 请记住,在使用FontForge创建和分发字体时,要遵守适用的版权和许可规定,并尊重任何相关的知识产权。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值