TTF / OTF / WOFF / WOFF2

最后更新 2026-11-02

EN中文
本页目录

后缀名是习惯,不是规范。.ttf 与 .otf 都可能是同一种容器,只是里面装的轮廓不同;.woff 与 .woff2 则根本不是新格式,而是「给网页用的压缩包装」。

字体文件开头的四个字节(sfntVersion)说明了它到底是什么:

开头 是什么
00 01 00 00 TrueType 容器
OTTO OpenType 容器(通常装 CFF 轮廓)
true / typ1 很老的 Apple 写法
ttcf 字体集合(一个文件里多个字款)
wOFF WOFF 包装
wOF2 WOFF2 包装

所以「OTTO 开头的一定是 .otf」和「.otf 里一定没有 TrueType 轮廓」都不对——惯例如此,规范不强制。

TrueType 与 CFF:两套轮廓

真正的区别在轮廓怎么存:

  • TrueType:用二次贝塞尔曲线,表是 glyf + loca;
  • CFF / CFF2:用三次贝塞尔曲线,表是 CFF (注意名字末尾有个空格)或 CFF2。

两套轮廓在同一套「表」的框架里,所以 name、OS/2、cmap 这些长得一模一样。这也是为什么同一个设计导成两种格式后,除了轮廓之外的东西几乎不变。

字体集合

.ttc / .otc 把一个家族的多个字款打进一个文件,共用 cmap 与 name 的部分数据,省体积。系统字体常见(比如 macOS 的许多内置字体)。

对程序来说这不是「一个字体」,而是一个容器:要按索引挑出其中一个字款。本站遇到集合时会优先挑与请求家族匹配的那一个。

WOFF 与 WOFF2

两者都是容器:把原始字体压缩后包一层,并加上元数据与私有数据的位置。解开之后,里面还是普通的 TrueType/OpenType。

  • WOFF:zlib 压缩;
  • WOFF2:Brotli 压缩,并且重排了部分表结构(能显著更小)。

浏览器支持 WOFF2,老浏览器退回 WOFF。网页字体优先用 WOFF2,不是为了省事,是因为它确实小得多。

变量字体是「额外表」,不是新格式

变量字体的文件后缀与静态字体一样,区别在于里面多出了 fvar(轴)、gvar 或 CFF2(每个轴上的变化)、STAT(样式属性)。所以:

  • 一个 .ttf 可能含无数个字重(fvar + gvar);
  • 也可能只含一个(静态)。

单看后缀判断不了,要看表目录。

本站的立场

本站不托管、不提供下载任何字体文件(见 docs/adr/0001):服务端只存指纹与元数据。所以你在这里看到的是「这个字体存在、长什么样、有什么度量」,而不是「点这里下载」。

检查器里能「临时载入」库字体,是从上游 CDN 把字节取到浏览器内存里临时注册,用完即弃,不落到本站的存储上。

延伸阅读

  • OpenType 规范:sfnt 容器与 glyf / CFF 的说明
  • W3C:WOFF 与 WOFF2 规范
  • OpenType 规范:fvar / gvar / STAT