如何使用 freetype 在 iOS 上渲染 emoji 字符?

How to use freetype to render emoji character on iOS?

FreeType 从 2.5 版本开始支持 emoji 字符。我想通过 FreeType 渲染表情符号,然后在 OpenGL 中使用它,所以这里不会使用 UIKit API。但是,我不想(我也没有许可证)随我的应用程序一起发送 "Apple Color Emoji.ttf" 文件。

那么问题来了: 有没有办法在iOS设备上加载系统表情符号字体文件? 是否有Objective-c或c/c++API可以访问系统表情字体文件?

首先,让我们澄清一个误解。您不必使用 UIKit 在 iOS 上使用系统库来呈现字体。您可以使用 Core Text(它具有常规的旧 C 接口)将文本直接渲染到屏幕外缓冲区中,并使用该缓冲区作为 OpenGL 的纹理。这将自动处理 非常巨大的 工作量,否则您将自己完成这些工作:

  • 字符编码

  • 文字整形

  • 换行

  • 字距调整

  • 字形替换

  • 字体选择(粗体、斜体等)

  • 等等

Core Text 真的是FreeType + HarfBuzz + Pango + ICU 的替代品。如果我想做一些 Core Text 做不到的事情,我只会直接使用 FreeType,比如将字形渲染成精灵 sheet 并用它来绘制文本,或者如果我想跨平台共享代码。

现在,如果您确信自己花额外的几周时间来完成它是值得的,那么您将不得不解析 /System/Library/Fonts/CGFontCache.plist 文件以找到所需字体的位置。参见:Location of the fonts on the iPhone?