Quartz上有一篇关于中文字体制作的文章,其中有一个奇怪的说法:
多年来,这种做法一直可行,但中文字体始终存在一个特殊问题:由于字形太多,字体需要为以前未访问过该网站的用户进行大量下载,这对用户和提供商的带宽都造成了压力。(中文字体单一样式和粗细可能高达 6 或 7 兆字节。相比之下,Quartz 的正文字体 PT Serif 涵盖了 100 多种拉丁语言,四种样式仅占 1.4 兆字节。)现在,中文网页字体提供商会巧妙地扫描网页文本以识别需要哪些字形,然后只将这些字形发送给用户,而不是全部 13,000 多个字形。
网站是否可以只提供部分字体来呈现文本?浏览器如何下载这些不完整的字体?这与字体子集有关吗unicode-range
?
首先,这不一定正确;许多文件类型并不是“全有或全无”的——通常它们由较小的独立部分组成,并且只有某些部分是强制性的(标题或索引),而其余部分则是“按需”的;许多格式甚至明确设计为可部分使用。例如,您的浏览器在完全加载之前就可以开始显示 .html 文件,并且它可以通过仅下载所需的索引和字节范围来流式传输 .mp4 视频文件。
但通常字体子集化是通过生成新文件来完成的。如何共享照片或其他图像的一部分?使用图像编辑程序加载/解码文件,裁剪所需部分并将其保存/重新编码为新图像文件。这样,您就不需要“文件的一部分”了;您拥有一个代表部分数据的整个文件,但仍具有整个结构(脚手架)。
字体文件也一样。字体文件具有明确定义的结构,各部分之间关系清晰,因此字体编辑软件可以加载 .ttf 文件,丢弃不需要的部分(例如单个字形图),并将其余部分保存为全新的 .ttf(或更常见的 .woff)字体文件。
对于自动处理,可以使用类似 python-fonttools 的工具来完成,可以像其他资产一样预先准备子集字体文件,也可以即时准备(提供子集字体的 Web 应用程序就像提供裁剪图像一样)。例如,Google Fonts API 按字形范围提供子集。
(如果您想手动编辑字体文件,Photoshop 的对应软件可能是 FontForge。我曾多次使用它从字体中删除特定的不需要的连字符号。)
大多数网页都不是这样工作的。它们可能会使用静态定义的广泛子集,按脚本(拉丁文与希腊文等)或其他 Unicode 范围对字体进行切割。
您引用的帖子特别描述了精确的 PDF 样式子集,这是中国网络字体提供商所做的新事物,与大多数不这样做的“西方”网站相比。
确实有 webfont 提供商可以这样做吗?我不知道。有 webfont 提供商可以这样做,这合理吗?是的,从技术上讲,使用现有工具是可行的,尤其是对于内容大部分为静态的网站。
(虽然我认为它不是按页的,而是“所有文章中使用的所有字形”的固定子集,因为为每个页面提供单独的子集会使用更多的数据而不是更少的数据。)
人们会认为使用自定义字体的网站不会进行这种子集设置,或者不会在输入字段中使用自定义字体。通常只在正文中使用 Web 字体,而表单则保留默认字体。(通常只在标题中使用花哨的 Web 字体,而正文使用默认字体;这样的网站肯定可以利用精确子集设置,因为子集很小,输入字段肯定不会使用字体
<h1>
。)(关键在于,技术的使用也并非“全有或全无”的问题。如果一项技术不适合某些网站,但它可能仍然适合其他网站。)
事实上,我也看到不少西方网站使用仅限于 ASCII 的字体子集(许可成本最低?),当字体用于显示人名时尤其明显 - 即设计师不关心客户姓名中可能包含基本集之外的字符,但仍然使用它。