【问题标题】:Must I use path to fonts?我必须使用字体路径吗?
【发布时间】:2016-04-02 09:33:21
【问题描述】:

FT_New_Face 函数似乎是我正在寻找的函数,但它需要字体文件的路径。我想在不提供路径的情况下打开像“Times New Roman”这样的字体。我该怎么做?

【问题讨论】:

  • 您可以将 FT_New_Face 包装到一个接受字体名称而不是路径的函数中。此函数将从设置文件中读取的路径指示可以找到字体的搜索路径。由于您不想一遍又一遍地阅读您的路径,因此通过使其成为仿函数(具有重载 () 的对象)或例如方法使其成为有状态的。一个 FontFinder 类。
  • “Times New Roman”是字体name,但不是字体file的名称。名称字符串在字体文件中。那么当你只给它一个名字时,FreeType 怎么知道要选择什么字体文件呢?您需要在代码中将字体名称翻译成字体文件somewhere
  • @JacquesdeHooge:如何在磁盘上找到字体?我在我的 Ubuntu 安装中看到一些位于 /usr/share/fonts 的字体,这是我应该在所有发行版中查看的位置吗?如何找到系统默认字体?
  • @RadLexus:这就是我要问的。一个好的字体系统会使用字体名称,因为这是大多数 API 用户想要的。只有有缺陷的 API 才会要求用户提供系统相关和内部路径(或者更糟糕的是:每个应用程序都有自己的一组字体的老式应用程序)。我希望有一个我错过的更好的函数调用。本着 X 和朋友们的精神,这一切都是关于在子系统/编码器上推送任何内容,这意味着将所有工作推送给应用程序开发人员。这就是为什么我发现 GNU 如此糟糕而 Linux 如此优秀,并且一直希望 BDFL 来清理他们的行为。
  • 啊——看起来即使对于 Ubuntu 也不是那么简单......“GNU/Linux 中有多个位置可以保存字体。[可能的文件夹列表]”@987654322 @.

标签: c++ x11 freetype


【解决方案1】:

大多数基于 unix 的系统使用Fontconfig 来从一组搜索参数(家族名称、变体、重量等)中获得最佳匹配的字体文件

Fontconfig 是一个用于配置和自定义字体访问的库。

Fontconfig 可以:

  • 自动安装时发现新字体,删除常用字体 配置问题的根源。
  • 执行字体名称替换,以便在缺少字体时可以选择适当的替代字体。
  • 确定完全覆盖一组字体所需的字体集 的语言。
  • 在使用基于 XML 的配置文件时构建了 GUI 配置工具(尽管我们相信使用自动发现 这种需求被最小化了)。
  • 高效快速地找到您需要的字体 需要在您安装的字体集中,即使您有 安装了数千种字体,同时最大限度地减少内存使用。
  • 与 X Render Extension 和 FreeType 一起使用,在显示器上实现高质量、抗锯齿和亚像素渲染的文本。

Fontconfig 没有:

  • 自己渲染字体(这留给 FreeType 或其他 渲染机制)
  • 以任何方式依赖于 X Window 系统,所以 仅打印机应用程序没有此类依赖项

Fontconfig 相对便携,可用于各种系统,但 OSX 有 CoreText 具有类似的功能,Windows 有 DirectWrite

有关如何使用 Fontconfig 的帮助,请参阅this 问题。

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 2017-04-23
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多