UltKit

TTF、OTF、WOFF区别:电脑安装和网页该用哪种字体格式

电脑上安装TTF或OTF,网站上使用WOFF2。TrueType和OpenType是所有操作系统都能读取的桌面字体格式;WOFF和WOFF2则是同样的字体数据经过压缩后便于下载的版本,浏览器优先使用WOFF2,因为它小约30%。

Jonas WeberJonas Weber网站性能编辑
更新于 11 分钟阅读
架子和抽屉里挤满了大小、颜色各异的老式木质活字
Answer

该用哪种字体格式:TTF、OTF、WOFF 还是 WOFF2?

安装到电脑上,用 TTF 或 OTF,两者在 Windows、macOS 和 Linux 上都能用。用于网站,优先提供 WOFF2,WOFF 只作备用。网页上直接使用 TTF 或 OTF 原文件,体积会比必要的大 2–3 倍。

通俗解释TrueType、OpenType、WOFF和WOFF2

TrueType 是这四种格式中最老的一种。苹果在 1991 年随 System 7 推出,微软第二年将其用于 Windows 3.1。TrueType 字体用二次曲线描述每个字母,每段曲线只有一个控制点,在早期硬件上绘制成本很低。它还带有字体微调(hinting):字体内部的小程序会把笔画和曲线对齐到像素网格,让文字在低分辨率屏幕上依然清晰。.ttf 扩展名至今仍表示采用这种二次曲线轮廓的字体。

OpenType 由微软和 Adobe 于 1996 年发布,它是一种封装格式,而不是新的轮廓类型。它可以容纳 TrueType 轮廓,也可以容纳存放在 CFF 表中的 PostScript 轮廓,后者使用三次曲线,每段有两个控制点。在轮廓之外,它还增加了用于高级排版的布局表:标准连字和自选连字、小型大写字母、旧式数字、样式集、上下文替换和字距调整。按惯例,基于 CFF 的 OpenType 字体保存为 .otf,而采用 TrueType 轮廓的 OpenType 字体仍使用 .ttf 扩展名。

WOFF 和 WOFF2 是专为网页设计的封装格式。WOFF 于 2009 年起草,2012 年成为 W3C 推荐标准,用 zlib 压缩每个字体表。WOFF2 于 2018 年成为 W3C 推荐标准,改用 Brotli,并先对字形数据做预处理,通常比 WOFF 小约 30%。另外还有三种相关格式:EOT 是 Internet Explorer 自己的网页字体格式,SVG 字体是只有 Safari 支持的早期权宜之计,可变字体则在 2016 年随 OpenType 1.8 加入,可把一整段字重或字宽范围放进一个文件。

  1. 1991

    TrueType

    苹果随 System 7 推出二次曲线轮廓和字体微调,1992 年 Windows 3.1 跟进。

  2. 1996

    OpenType

    微软和 Adobe 发布统一容器,可容纳 TrueType 或 CFF 轮廓,并带有布局功能。

  3. 2012

    WOFF 1.0

    2009 年起草,随后成为 W3C 推荐标准:表结构不变,用 zlib 压缩。

  4. 2016

    可变字体

    OpenType 1.8 让一个文件可包含连续的字重、字宽或倾斜轴。

  5. 2018

    WOFF2

    采用 Brotli 的 W3C 推荐标准,通常比 WOFF 小约 30%。

电脑上应该安装哪种字体格式

安装 TTF 或 OTF 都可以,不必纠结选哪个。Windows 10 和 11 右键点击后选择安装即可,macOS 用“字体册”打开,Linux 桌面在字体缓存刷新后会从 ~/.local/share/fonts 读取。Word、Photoshop、Figma 桌面版、Affinity 和 LibreOffice 都能读取两者。如果设计师给你同一字体族的两种版本,OTF 通常是字体设计师原始绘制的版本,TTF 则是为旧软件做的转换版。

两者真正有区别的情形不多。一些刻字机和刺绣软件、游戏引擎以及单片机显示库只认 TrueType 轮廓,基于 CFF 的 OTF 在那里会显示异常,需要把 OTF 转换为 TTF。反过来,桌面系统无法直接安装 WOFF 或 WOFF2:这些文件是为浏览器打包的。同一字体族只安装一个版本,因为内部名称相同的 TTF 和 OTF 会让字体菜单混乱,应用可能选错。

TrueType 字体集.ttc · 字体集 · .otc
一个文件中存放多个字体,通常是同一字体族的不同样式或语言变体,并让它们共用相同的字形以节省空间。Windows 和 macOS 会一次安装其中所有字体;Noto Sans CJK 等系统中日韩字体族常以这种方式发布。基于 CFF 轮廓的字体集有时改用 .otc 扩展名。
木制字盒抽屉的小格中整齐排列的金属活字
图片:Unsplash

网站上应该使用哪种字体格式

Chrome、Edge、Firefox 和 Safari 的所有当前版本都支持 WOFF2,所以它应该是 @font-face 规则中的第一个来源,通常也是唯一来源。只有当统计数据显示仍有 2016 年前后以前的浏览器访问(如旧版 Android WebView 或嵌入式电视浏览器)时,才需要在后面加一行 WOFF。浏览器会按顺序遍历 src 列表,下载第一个支持的格式,所以备用格式不会给现代浏览器的访客增加任何开销。如果你已有桌面版 TrueType 文件,用 TTF 转 WOFF 一步就能生成备用文件。

除非平台强制要求(一些邮件编辑器和旧内容系统就是如此),否则不要在网站上直接提供 TTF 或 OTF 原文件。浏览器可以正常渲染,但除非服务器对字体启用 gzip,否则文件是未压缩传输的,而且任何人都能拿到可直接安装的桌面版本。下面的 font-display: swap 会让浏览器先用备用字体立即显示文字,待你的字体加载完成后再替换,而不是隐藏文字最长 3 秒等待字体。

尽量把字体文件放在自己的域名下。Chrome、Safari 和 Firefox 现在按网站分区缓存,从共享 CDN 获取的字体不会再跨网站复用,自托管还能省去一次 DNS 查询和连接。只对首屏用到的一两个字重添加 <link rel="preload">;预加载所有样式会和图片争抢带宽。

先 WOFF2、后 WOFF 备用并启用 swap 的 @font-face
@font-face {
  font-family: "Source Serif";
  src: url("/fonts/source-serif-regular.woff2") format("woff2"),
       url("/fonts/source-serif-regular.woff") format("woff");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+2013-2014, U+2018-201E, U+20AC;
}

常见字体文件大小,以及子集化为何重要

单个拉丁文字重保存为 WOFF2,通常为 20–60 KB。同一字体保存为未压缩的 TTF,往往大两到三倍;如果字体族还涵盖希腊文、西里尔文和越南文,每个样式可能超过 200 KB。中日韩字体则完全是另一个量级:一个完整的中日韩字重包含数万个字形,即使经过 WOFF2 压缩通常也有几 MB,在页面显示文字之前加载这么大的文件实在太多。

子集化会去掉页面从不使用的字符,而 unicode-range 告诉浏览器每个文件涵盖哪些字符,只有页面确实包含这些字符时才会下载该文件。Google Fonts 对中日韩字体正是这样做的,把每个字体族切成许多按需加载的小分片。对于你自己的字体,字体转换器中的保留字符选项可以在文件上传到服务器之前,把文件精简为 Latin + accents 或仅我输入的字符;安装到电脑上的字体请保持所有字符。

拉丁文字重保存为 WOFF2 的典型大小
20–60 KB
WOFF2 相比 WOFF 的典型节省
≈ 30%
完整中日韩字重的典型大小,即使是 WOFF2
几 MB

字体格式转换,以及哪些内容会丢失

对于 TrueType 类字体,TTF 与 OTF 互转只是更换容器:轮廓表、度量信息和布局功能原样搬过去。值得一说的是把基于 CFF 的 OTF 转为 TTF。三次曲线无法直接复制到二次曲线轮廓格式中,所以每条曲线会被重绘为一段或多段二次曲线,误差远小于一个像素。PostScript 微调信息同样无法转换,因此 OTF 转 TTF 工具提供了字体微调的保留、移除或自动提示选项。

从网页格式转回桌面格式是最常见的转换。你下载了主题或设计素材包,发现只有 .woff 或 .woff2 文件,却需要在 Word 或 Figma 中使用这个字体。WOFF 转 TTF 会去掉压缩并写回原始表,因此字形、字距和功能与原来一致。无法恢复的是网页版已经丢掉的内容,例如被子集化删除的字符,或为节省字节而去掉的微调信息。

大多数转换问题都可以归结为三点:字体微调、布局功能和可变轴。下面的列表列出了转换后你可能注意到的现象及其常见原因。

  • 转换后小字号文字在 Windows 上显得模糊或不均匀

    原有微调信息被移除或无法带过来。请把字体微调设为自动提示后重新转换;在 Retina 屏和手机屏幕上,这种差别很难看出来。

  • 连字、小型大写字母或样式集不起作用了

    可能是应用没有开放 OpenType 功能,也可能是子集化步骤删掉了这些功能所指向的替换字形。请用所有字符重新转换原文件,并确认你的应用有排版或 OpenType 面板。

  • 可变字体现在只显示一种字重

    有些工具会把可变字体压平成单个静态实例。请保留可变字体源文件,并在删除原文件前检查结果中是否仍有轴列表。

  • 转换后的字体在字体菜单中出现两次

    两个版本的内部字体族名称相同。请卸载旧文件,或在转换前于高级设置中设置新的字体族名称。

使用或转换字体前先做检查

字体文件就像一个小型数据库,其中三个部分能回答大多数问题。name 表保存字体族名称、样式名称、版本、版权声明,通常还有许可证网址;macOS 字体册在信息视图中显示它,Windows 字体预览则显示前几行。字形覆盖范围决定字体能排哪些语言:只含拉丁文的字体遇到缺失的波兰语、土耳其语或越南语字符时,会悄悄回退到另一种字体。对于可变字体,fvar 表列出它的轴,例如字重 100 到 900 或字宽 75 到 125。

字体上线前值得先看一眼授权。商业字体公司通常分别出售桌面、网页和应用授权,桌面授权一般允许在一定数量的电脑上安装,但不包括向网站访客提供文件或打包进手机应用。转换字体只改变文件格式,不改变授权,所以由桌面 TTF 生成的 WOFF2 与该 TTF 的条款相同。采用 SIL 开放字体许可证的字体(Google Fonts 上的大多数字体)可以转换、子集化和自托管。

  • name 表中的字体族名称和样式名称正确无误
  • 版本号与你打算使用的版本一致
  • 你的文字用到的每种语言,其带重音符号和特殊字符都齐全
  • 可变字体仍列出字重或字宽轴
  • 授权涵盖你的用途:桌面、网站、应用或嵌入文档

选择对照表:不同用途该用哪种字体格式

大多数字体问题归结起来,就是文件将放在哪里。如果安装在电脑上或打包进应用,就用 TrueType 或 OpenType;如果由浏览器下载,就用压缩的网页封装格式。下表把常见场景对应到应选的格式以及转换方式,可以跳过背景知识,直接找到你需要的文件。

还有两种场景介于两类之间。EPUB 3 接受 TTF、OTF 和 WOFF,所以电子书可以使用任一类格式;SVG 字体文件与矢量图同出一脉,但如今主要用于部分绘图仪和雕刻软件,而不是浏览器。

按用途选择字体格式
用途应使用的格式如果你只有转换
安装到 Windows、macOS 或 LinuxTTF 或 OTFWOFF 或 WOFF2WOFF → TTF
软件不接受你的 OTFTTF基于 CFF 的 OTFOTF → TTF
自托管的网站字体WOFF2TTF 或 OTFTTF → WOFF2
兼容极旧浏览器的备用字体WOFFTTFTTF → WOFF
中文、日文或韩文网站子集化的 WOFF2 分片完整的 TTF 或 OTF先子集化,再转 WOFF2
一个文件包含多个字重可变 TTF 或 WOFF2可变 TTF转换时保留轴
电子书(EPUB 3)TTF、OTF 或 WOFFWOFF2WOFF2 → TTF

要点总结

  • 在电脑上安装 TTF 或 OTF;两者在 Windows、macOS 和 Linux 上都能用。
  • 网站优先提供 WOFF2,只为极旧浏览器添加 WOFF,并设置 font-display: swap。
  • WOFF 和 WOFF2 是压缩封装格式,转换成它们改变的是下载大小,而不是字形。
  • 按文字系统和 unicode-range 做子集化;对动辄几 MB 的中日韩字体尤其重要。
  • 转换只改变文件格式,不改变授权,若不小心还可能丢失字体微调或可变轴。
分享XFacebookWhatsAppTelegram

常见问题

OTF的质量比TTF更好吗?

在正常字号下看不出区别。三次曲线和二次曲线都能描述相同的字母形状,两种格式也带有相同的 OpenType 功能。OTF 文件往往是设计师的原始绘制,这也是偏好它的唯一实际理由。

为什么下载的字体是一个ZIP,里面有TTF、WOFF和WOFF2?

供应商是按用途各给你一个文件。把 TTF 安装到你的电脑上,把 WOFF2 上传到网站,如果想要备用字体,再加上 WOFF。

WOFF2能在邮件中使用吗?

只能部分使用。Apple Mail 和 iOS 邮件会从链接的样式表加载网页字体,而 Gmail 和 Windows 版 Outlook 会忽略自定义字体而显示备用字体,所以 font-family 列表最后一定要加上安全的系统字体。

TTC文件能用在网站上吗?

不能直接转换。浏览器要求每个文件只含一个字体,所以请先从字体集中提取各个字体,再分别转换为 WOFF2。

可变字体能取代各字重的单独文件吗?

通常可以。涵盖字重 100 到 900 的可变 WOFF2,通常比四个或更多静态字重加起来还小,而且所有当前浏览器都支持。如果你只用一两个字重,静态文件可能更轻。

还有必要生成EOT和SVG字体吗?

很少需要。EOT 只对 Internet Explorer 8 及更早版本有意义,而当前的 Chrome 和 Firefox 会忽略 SVG 字体,所以只有为旧系统或能读取它们的软件才值得制作。

继续阅读