0

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

问题?

  1. 项目清单
  2. 什么语言最适合这个(得到处理字体的库)
  3. 是否有任何教程和资源,我可以在其中阅读有关此主题的更多信息。
  4. 有没有现成的免费选项?
  5. fontsquirell 使用什么来进行转换和子设置

要求:

  1. 项目清单
  2. 它需要处理至少一种字体类型。ttf / otf 并不重要。
  3. 如果它将是第三方,它必须能够从控制台/通过 api 运行

提前致谢

4

3 回答 3

1

对于 Type1 字体,这将是一项相对复杂的任务,需要从头开始。您需要很好地处理 Type1 格式。该规范可从 Adob​​e 免费获得。但是粗略地阅读该文档会告诉您它不适合胆小的人,并且需要对 PostScript 有一定的了解。

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

于 2013-03-08T06:35:37.913 回答
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中提供的 API 。Google webfonts api 也支持子集,但仅适用于 google 字体。

于 2015-01-04T22:13:40.237 回答
0

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

如何在 PHP 中生成字体子集?

于 2013-01-26T14:10:46.720 回答