需要指导 - 编写自己的字体转换器/子设置器

时间:2013-01-25 19:46:27

标签: fonts console converter subset

我想制作自己的字体转换器/子设置器。例如只从字体中选择特定字母并生成一个新字母。

问题?

  1. 列表项
  2. 哪种语言最适合这种语言(获得处理字体的库)
  3. 是否有任何教程,资源,我可以阅读更多有关此主题的内容。
  4. 是否有现成的免费选项?
  5. fontsquirell用于转换和子设置的内容
  6. 要求:

    1. 列表项
    2. 它需要处理至少一种字体类型。 ttf / otf并不重要。
    3. 如果它是第三方,则必须能够从console / by api
    4. 运行

      提前致谢

3 个答案:

答案 0 :(得分:1)

对于Type1字体,从头开始这将是一项相对复杂的任务。你需要对Type1格式有一个很好的处理。该规范可从Adobe免费获得。但粗略阅读文档会告诉你,这不适合胆小的人,需要熟悉PostScript。

但是这项任务已经在名为GhostScript的开源项目中完成。您可以自动生成一个简单的单行PostScript程序来打印您需要的字母集,然后在打开fontsubsetting的情况下将PS渲染为PDF。生成的PDF将包含子集化的Type1字体,然后您可以提取该字体。 GhostScript从命令行运行,整个过程可以用非常少的编程编写脚本;当然,虽然不是没有相当多的工作;)

答案 1 :(得分:0)

另一次搜索运行并找到了这个

How do you generate a font subset in PHP?

答案 2 :(得分:0)

这些是您可以对字体进行分组的一些方法。

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中提供的那样。 Google webfonts api也支持子集,但仅支持谷歌字体。