我想制作自己的字体转换器/子设置器。例如,仅从字体中选择特定字母并生成一个新字母。
问题?
- 项目清单
- 什么语言最适合这个(得到处理字体的库)
- 是否有任何教程和资源,我可以在其中阅读有关此主题的更多信息。
- 有没有现成的免费选项?
- fontsquirell 使用什么来进行转换和子设置
要求:
- 项目清单
- 它需要处理至少一种字体类型。ttf / otf 并不重要。
- 如果它将是第三方,它必须能够从控制台/通过 api 运行
提前致谢
对于 Type1 字体,这将是一项相对复杂的任务,需要从头开始。您需要很好地处理 Type1 格式。该规范可从 Adobe 免费获得。但是粗略地阅读该文档会告诉您它不适合胆小的人,并且需要对 PostScript 有一定的了解。
但这项任务已经在名为 GhostScript 的开源项目中完成。您可以自动生成一个简单的单行 PostScript 程序来打印您需要的一组字母,然后在打开 fontsubsetting 的情况下将 PS 渲染为 PDF。生成的 PDF 将包含您可以提取的子集 Type1 字体。GhostScript 从命令行运行,整个事情可以用很少的编程编写脚本;当然,虽然不是没有大量的工作;)
这些是您可以对字体进行子集化的一些方法。
1)使用支持字体子集的库编写自己的程序
https://github.com/PhenX/php-font-lib上的 php-font-lib支持字体子集。
$fontfile = "example.ttf";
$subset = "abcdefghijklmnopqrstuvwxyz";
$font = Font::load($fontfile);
if ($font instanceof Font_TrueType_Collection) {
$font = $font->getFont(0);
}
$font->parse();
$font->setSubset($subset);
$font->reduce();
$tmp = tempnam(sys_get_temp_dir(), "fnt");
$font->open($tmp, Font_Binary_Stream::modeWrite);
$font->encode(array("OS/2"));
$font->close();
2)使用基于网络的字体子集工具
我在http://everythingfonts.com/subsetter找到了最好的一个。该服务已经对字形块进行了分类,因此我无需手动输入它们,从而节省了大量时间。此外,它支持多种格式,而不仅仅是 woff 或 ttf。http://www.subsetter.com/也是一个不错的选择,但仅适用于 webfonts。
3)使用支持子集的字体应用程序
我知道 fontforge 允许子集,我过去曾使用过它。
4)使用 API
使用字体子集 API,例如http://everythingfonts.com/api/subset中提供的 API 。Google webfonts api 也支持子集,但仅适用于 google 字体。
另一个搜索运行并找到了这个
答案链接:http ://www.4real.gr/technical-documents-ttf-subset.html
它基于 Php,用于 ttf,可以根据我的需要轻松修改。