如何使用 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?
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?