定义
TrueType是一种用数学曲线描述字符外形的数字化字体技术,其字体文件通常以 .ttf 为扩展名。它记录的不是每个字符的像素图形,而是一组轮廓点坐标,因而与分辨率无关,可以在任意字号下重新计算并输出。[1]
TrueType字体文件由若干带四字符标签的数据表组成,其中必须包含的有 cmap(字符编码到字形索引的映射表)、glyf(字形轮廓数据)、loca(轮廓数据位置索引)、head(字体头信息)、hhea 与 hmtx(水平度量)、maxp(最大值描述)、name(名称表)、post 和 OS/2 等。字形轮廓存放于 glyf 表,cmap 与 loca 两级映射机制把系统的字符内码转换为具体字形数据的位置。[4][5]
原理
TrueType用直线段和二次贝塞尔曲线拼接出字符的封闭轮廓。轮廓点分布在曲线上或曲线之外,分为在线点和离线点:一个在线点与相邻离线点构成一段二次曲线;当两个离线点相邻时,取它们连线的中点作为隐含的在线点,从而保证曲线连接处一阶导数连续。描述一个圆时,二次曲线只需 8 个关键点和 7 段曲线,而三次曲线需要 12 个关键点和 11 段曲线。[2][6]
字形先在以 em 方格为基准的设计坐标系中绘制,坐标单位称为 FUnit,每 em 的 FUnit 数量(units per em)决定设计精度,苹果的 TrueType 字体采用 2048。渲染时按下面的比例把设计坐标换算为像素坐标,其中 pointSize 为字号,resolution 为输出设备每英寸的点数:
例如某字形特征长 550 FUnit,在 72 dpi 设备上以 18 点显示、units per em 为 2048 时,换算结果为 4.83 像素。为便于控制轮廓,TrueType 把像素坐标精确到 1/64 像素。[6]
轮廓描述之后还有一道指令处理环节,通常称为微调或提示(hinting)。字体文件中存放一段字节码程序,由执行环境的虚拟机逐条运行,用来调整关键点的位置,使笔画粗细、衬线细节在小字号下保持一致,避免笔画过窄、过宽甚至消失。这一机制与只包含静态提示信息的 PostScript Type 1 不同,因此同一种字体不必为屏幕显示和打印分别准备版本。[7][8]
发展历程
20世纪80年代后期,Adobe 基于矢量图形的 PostScript Type 1 字体已在出版领域占据主导,而字体的许可费用较高。为摆脱这一依赖,苹果公司启动了自有轮廓字体技术的研发,项目早期代号为 Bass,后改称 Royal;微软当时也在寻找类似的轮廓格式,苹果遂同意将 TrueType 授权给微软。[1][7]
苹果于 1991 年 5 月在 Macintosh 的 System 7 操作系统中首次完整支持 TrueType。微软在 1992 年 4 月发布的 Windows 3.1 中开始提供该格式,随后重写了 TrueType 光栅器以提升效率,1.5 版随 Windows NT 3.1 发布,Windows 95 与 NT 3.51 中为 1.66 版,并加入了灰度光栅化能力。[1]
苹果在 1994 年前后推出 TrueType GX,为格式加入样式变化与行布局管理等扩展;微软则发展出 TrueType Open,以支持多语言排版和更精细的排版控制。1996 年,微软与 Adobe 合作发布 OpenType,可同时容纳 TrueType 与 PostScript 两种轮廓数据,并保持向后兼容。此后 OpenType 逐步成为主流,TrueType 专有扩展中的一部分以 Apple Advanced Typography 之名保留在 macOS 中。[1][7]
应用
TrueType 内置于 Windows 和 macOS 系统中,系统自带的界面字体和办公软件字体多数采用这一格式,苹果的 macOS 与 iOS 也捆绑了大量 TrueType 与 OpenType 字体并用同一套光栅器渲染。在字库层面,桌面出版系统使用的字库主要有 PostScript 与 TrueType 两种标准,二者均以曲线描述轮廓,可以在输出时获得较高的字形质量。[3][9]
开发者可以通过系统接口读取字形数据。在 Windows 的图形设备接口中,GetGlyphOutline 函数可以取出字形的轮廓,结果以折线和样条记录的形式返回,前者对应直线段,后者对应二次样条曲线;应用程序也可以绕开操作系统,直接按规范解析字体文件,以脱离对系统的依赖。[10][5]
由于轮廓可被当作曲线处理,TrueType 字体常被用来制作标题字和特殊效果字,也比较适合嵌入文档以实现跨系统传递。在开源软件中,FreeType 库被广泛用于解析和渲染 TrueType、Type 1 与 OpenType 字体。[11][8]
局限
二次贝塞尔曲线在数学上比三次曲线简单、处理速度更快,但对复杂形状需要更多的点才能保持平滑,因而在描述精度上不及采用三次曲线的 PostScript 字体,在字形复杂或字号很小时差距更为明显。TrueType 主要依靠指令系统来弥补这一不足。[2][12]
指令系统本身也带来了代价。微调需要针对每个字符逐点编写底层指令,只能整体执行或完全不执行,学习曲线陡峭,通常需要较高水平的字体设计人员才能掌握,编写过程带有较强的试错性质。指令越多,字体文件也越大,在多语言、多字重的情况下文件体积增长明显。[7][13]
轮廓在向像素网格映射时需要进行取整,在低分辨率和可用像素很少的情况下,笔画可能出现过粗、过细或完全丢失,相邻部件也可能粘连或细节被抹去。这一问题正是微调指令所要处理的对象,但不同光栅器的取整方式不完全一致,同一字体在不同环境下的渲染结果可能存在差异。[14]
参见
-
OpenType —— 在 TrueType 基础上扩展而成的字体格式,可同时容纳 TrueType 与 PostScript 轮廓数据。
-
PostScript —— Adobe 的页面描述语言,其 Type 1 字体是 TrueType 出现前的主要轮廓字体标准。
-
贝塞尔曲线 —— TrueType 用来描述字形轮廓的数学曲线。
-
点阵字体 —— 以固定分辨率存储字符像素的字体形式,与轮廓字体相对。
-
字体微调 —— TrueType 用于改善低分辨率下字形显示效果的指令机制。
-
FreeType —— 被广泛使用的开源字体渲染库,可解析 TrueType、Type 1 与 OpenType 字体。
参考资料
- A brief history of TrueType - 跳到主要內容 跳過到 Ask Learn 聊天體驗 [引用日期2026-10-14]
- [科普中国]-矢量字体 [引用日期2026-10-14]
- TTF字体 [引用日期2026-10-14]
- Legacy Document [引用日期2026-10-14]
- Legacy Document [引用日期2026-10-14]
- ttch01 [引用日期2026-10-14]
- Font hinting: From first developments to use in [引用日期2026-10-14]
- TrueType – Wikipedia [引用日期2026-10-14]
- TTF 字体格式 [引用日期2026-10-14]
- Retrieving Character Outlines [引用日期2026-10-14]
- True Type [引用日期2026-10-14]
- Vector_font [引用日期2026-10-14]
- malek-diplomova_prace(PDF) [引用日期2026-10-14]
- US7573476(PDF) [引用日期2026-10-14]