对字体文件中的数据进行压缩的系统和方法转让专利

申请号 : CN201280051119.0

文献号 : CN103890754B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 戴维·库特尔拉斐尔·莱纳斯·莱维恩

申请人 : 谷歌公司

摘要 :

接收包括压缩数据的压缩字体文件。对该压缩数据进行解压缩以生成解压缩数据。尝试对解压缩数据进行验证。在该解压缩数据内,检测与字体文件的元素相对应的预定模式的无效数据。通过利用该元素对至少一些无效数据进行替换来对该字体文件进行重构。

权利要求 :

1.一种用于处理数据的方法,包括:

接收包括压缩数据的压缩字体文件;

对所述压缩数据进行解压缩以生成解压缩数据;

尝试对所述解压缩数据进行验证;

在所述解压缩数据内检测与字体文件的元素相对应的预定模式的无效数据;

确定所述预定模式的无效数据的位置;

基于所述预定模式的无效数据和所述预定模式的无效数据的位置来确定所述字体文件的所述元素,其中所确定的元素包括以下中的至少一个:与所述字体文件中的字形相关联的边框;和轨迹表,其中所述轨迹表包括在所述轨迹表内条目的起始位置的指示;以及通过利用所确定的元素对至少一些所述无效数据进行替换来对所述字体文件进行重构。

2.根据权利要求1的方法,其中所述轨迹表是通过对字形表进行扫描来得到的。

3.一种用于处理数据的方法,包括:

在字体文件内的表中识别冗余和非冗余数据,其中所述冗余数据包括以下中的至少一个:与所述字体文件中的多个表中的至少一个中的字形相关联的边框;和轨迹表,其中所述轨迹表包括在所述轨迹表内条目的起始位置的指示;

应用归零过程以替换所识别的冗余数据,其中所识别的冗余数据被基于所述冗余数据在所述表中的位置利用以预定模式布置的数据替换;

对所述字体文件进行压缩以生成压缩字体文件;以及传送所述压缩字体文件。

4.根据权利要求3的方法,其中所述轨迹表是通过对字形表进行扫描来得到的。

5.一种用于处理数据的系统,包括:

用于接收包括压缩数据的压缩字体文件的装置;

用于对所述压缩数据进行解压缩以生成解压缩数据的装置;

用于尝试对所述解压缩数据进行验证的装置;

用于在所述解压缩数据内检测与字体文件的元素相对应的预定模式的无效数据的装置;

用于确定所述预定模式的无效数据的位置的装置;

用于基于所述预定模式的无效数据和所述预定模式的无效数据的位置来确定所述字体文件的所述元素的装置,其中所确定的元素包括以下中的至少一个:与所述字体文件中的字形相关联的边框;和轨迹表,其中所述轨迹表包括在所述轨迹表内条目的起始位置的指示;以及用于通过利用所确定的元素对至少一些所述无效数据进行替换来对所述字体文件进行重构的装置。

6.根据权利要求5的系统,其中所述轨迹表是通过对字形表进行扫描来得到的。

说明书 :

对字体文件中的数据进行压缩的系统和方法

[0001] 相关申请的交叉引用
[0002] 本申请要求于2011年8月24日提交的美国临时申请序列号61/526,989的权益,其通过引用全文合并于此。

技术领域

[0003] 本说明书总体上涉及用于对字体进行压缩和解压缩的系统、方法和装置,更具体地涉及对字体文件中的字体进行压缩和解压缩的系统、方法和装置。

背景技术

[0004] 现有系统提供对字体文件的有限压缩。在现有系统中,字体文件可以在传输之前使用压缩算法进行压缩。在接收器处,可以对压缩的字体文件进行解压缩。然而,在对字体文件进行解压缩的同时,这样的现有系统产生了字体加载时间的延迟。

发明内容

[0005] 依据一个实施例,接收包括压缩数据的压缩字体文件。对该压缩数据进行解压缩以生成解压缩数据。尝试对解压缩数据进行验证。在该解压缩数据内,检测与字体文件的元素相对应的预定模式的无效数据。通过利用该元素对至少一些无效数据进行替换来对该字体文件进行重构。
[0006] 在另一个实施例中,所述元素包括以下中的至少一个:与字体文件中的字形相关联的边框;和轨迹(loca)表。在一个实施例中,该元素包括轨迹表并且其中该轨迹表包括在轨迹表内条目的起始位置的指示。在一个实施例中,该轨迹表是通过对字形表进行扫描来得到的。
[0007] 在另一个实施例中,在解压缩数据内检测有效数据。在一个实施例中,对字体文件进行重构进一步包括对该字体文件进行重构以包括有效数据。
[0008] 在另一个实施例中,预定模式的无效数据包括预定数量的零。
[0009] 依据一个实施例,在字体文件内的表中识别处冗余和非冗余数据。应用归零过程以替换所识别的冗余数据。对字体文件进行压缩以生成压缩字体文件。传送该压缩字体文件。
[0010] 在另一个实施例中,冗余数据包括以下中的至少一个:与字体文件中的多个表中的至少一个中的字形相关联的边框;和轨迹表。
[0011] 在另一个实施例中,冗余数据包括轨迹表,并且其中该轨迹表包括在该轨迹表内条目的起始位置的指示。在一个实施例中,该轨迹表是通过对字形表进行扫描来得到的。
[0012] 在另一个实施例中,所识别的冗余数据被以预定模式排列的数据所替换。在一个实施例中,该预定模式包括预定数量的零。
[0013] 依据一个实施例,接收对包括字体表的字体文件的请求。获取与该字体表相关联的共享初始概率图表。
[0014] 该共享初始概率图表包括基于所要压缩的字体表中的字节流的初始概率估计。基于该初始概率估计来对该字节流进行压缩以生成压缩字体表。传送压缩字体文件。
[0015] 在另一个实施例中,使用算术编码生成该共享初始概率估计。
[0016] 在另一个实施例中,该字节流包括多个数位。在一个实施例中,该多个数位由二进制数字系统表示。在一个实施例中,检测字节流中的模式并且自适应计算该字节流中的多个数位中的一个的概率。
[0017] 在另一个实施例中,该字体表包括以下中的一个:字形表;cmap表;紧排表;轨迹表;和名称表。在一个实施例中,字体表包括轨迹表,并且其中该轨迹表包括在该轨迹表内条目的起始位置的指示。在一个实施例中,该轨迹表是通过对字形表进行扫描来得到的。
[0018] 依据一个实施例,接收压缩字体表。获取与该压缩字体表相关联的共享初始概率图表。该共享初始概率图表包括基于压缩字体表中的字节流的初始概率估计。基于该初始概率估计对该字节流进行解压缩以生成解压缩字体表。提供该解压缩字体表。
[0019] 在另一个实施例中,使用算术编码来生成该共享初始概率估计。
[0020] 在另一个实施例中,该字节流包括多个数位。在一个实施例中,该多个数位由二进制数字系统表示。
[0021] 在另一个实施例中,该字体表包括以下中的一个:字形表;cmap表;紧排表;轨迹表;和名称表。
[0022] 依据一个实施例,接收对包括第一字体表和第二字体表的字体文件的请求。基于第一字体表的特性从多个熵编码器中选择第一熵编码器。基于第二字体表的特性从多个熵编码器中选择第二熵编码器。第一熵编码器被应用于第一字体表。第二熵编码器被应用于第二字体表。将与第一和第二字体表相对应的压缩数据进行组合以生成压缩字体文件。传送该压缩字体文件。
[0023] 在另一个实施例中,该字体文件进一步包括第三字体表,其中没有任何熵编码被应用于该第三字体表。
[0024] 在另一个实施例中,选择第一熵编码器包括:执行测试以将应用于第一字体表的第一熵编码器与应用于第一字体表的第二熵编码器进行比较,并且基于该测试将第一熵编码器确定为用于第一字体表的最优编码器。
[0025] 在另一个实施例中,该测试指示:向第一字体表应用第一熵编码器减小了第一字体表的大小。在一个实施例中,第一字体表的特性包括以下中的至少一个:第一字体表的原始大小;第一字体表在测试期间应用第一熵编码器之后的大小;第一字体表的类型;第一字体表的一个或多个内容变化;和第一字体表的重要性。在一个实施例中,第一字体表的类型包括以下中的一个:字形表;cmap表;紧排表;轨迹表;和名称表。
[0026] 在另一个实施例中,第一字体表的类型包括轨迹表,并且其中通过该轨迹表是通过对字形表进行扫描来得到的。
[0027] 依据一个实施例,接收对包括字体表的字体文件的请求。基于该字体表的特性从多个熵编码器中选择熵编码器。将所选择的熵编码器应用于字体表。生成包括已经对其应用了熵编码器的字体表的压缩字体文件。传送该压缩字体文件。
[0028] 在另一个实施例中,该字体文件进一步包括第二字体表,其中没有任何熵编码被应用于该第二字体表。
[0029] 在另一个实施例中,选择熵编码器包括执行测试以将应用于字体表的所选择的熵编码器与应用于该字体表的多个熵编码器中的其它熵编码器进行比较;并且基于该测试将所选择的熵编码器确定为用于该字体表的最优编码器。在一个实施例中,该测试指示:向该字体表应用所选择的熵编码器减小了该字体表的大小。
[0030] 在另一个实施例中,该字体表的特性包括以下中的至少一个:字体表的原始大小;字体表在测试期间应用熵编码器之后的大小;字体表的类型;字体表的一个或多个内容变化;和字体表的重要性。
[0031] 在一个实施例中,该字体表的类型包括以下中的一个:字形表;cmap表;紧排表;轨迹表;和名称表。
[0032] 通过参考以下详细描述和附图,本公开的这些和其它优势对于本领域普通技术人员将是显而易见的。

附图说明

[0033] 图1示出了依据实施例的可用来提供字体的通信系统;
[0034] 图2示出了依据实施例的示例性字体服务的功能组件;
[0035] 图3示出了依据实施例的示例性用户设备的功能组件;
[0036] 图4示出了依据实施例的示例性网站提供者的示例性组件;
[0037] 图5示出了依据实施例的在网页上显示的多种字体;
[0038] 图6A示出了依据实施例的示例性字体文件;
[0039] 图6B示出了依据实施例的示例性冗余数据;
[0040] 图7是描绘依据实施例的传送压缩字体文件的方法的流程图;
[0041] 图8是描绘依据实施例的重构压缩字体文件的方法的流程图;
[0042] 图9示出了依据实施例的解压缩数据;
[0043] 图10示出了依据实施例的重构字体文件;
[0044] 图11示出了依据实施例的具有多个字体表的示例性字体文件;
[0045] 图12示出了依据实施例的多个熵编码器算法;
[0046] 图13是描绘依据实施例的应用熵编码器算法的方法的流程图;
[0047] 图14是描绘依据实施例的应用熵编码器算法的方法的流程图;
[0048] 图15是描绘依据实施例的使用算术编码方案压缩字体文件的方法的流程图;
[0049] 图16示出了依据实施例的字节流和初始概率图表;
[0050] 图17是描绘依据实施例的使用算术编码方案解压缩字体文件的方法的流程图;
[0051] 图18示出了依据实施例的解压缩字体表;和
[0052] 图19示出了可以用来实施本发明的计算机的组件。

具体实施方式

[0053] 图1示出了依据实施例的可以被用来提供字体的通信系统100。通信系统100包括网络102、字体服务104、用户设备106和网站提供者108。通信系统100可以包括多于一个的用户设备。这些设备和/或服务器使用网络102互相通信。
[0054] 在图1的示例性实施例中,网络102是因特网。在其它实施例中,网络102可以包括多种不同类型的网络中的一个或多个,例如企业内部网、局域网(LAN)、广域网(WAN)、无线网络、基于光纤信道的存储域网络(SAN)或以太网。可以使用其它网络。替选地,网络102可以包括不同类型的网络的组合。
[0055] 字体服务104维护例如可以被用来在网页上呈现并显示文本的多种字体并且使得它们可被用户使用。网站提供者108可以维护如图5所示的网站502。替选地,网站502可以由字体服务104托管或者可以由另一服务(未示出)托管。
[0056] 图2示出了依据实施例的示例性字体服务104的功能组件。字体服务104包括处理器204和存储器206。存储器206包括一个或多个字体文件210。字体服务104可以包括图2中未示出的其它组件。在说明性实施例中,字体文件210和相关字体数据存储在存储器206内的数据库208中。数据库208可以维护一个或多个字体文件210和相关字体数据。在替选实施例中。字体文件210和字体数据可以存储在远离字体服务104的外部存储器中。
[0057] 图3示出了依据实施例的示例性用户设备106的功能组件。用户设备106包括浏览器302、显示器304和存储器306。浏览器302例如可以是用于经由因特网对万维网站点进行访问的常规web浏览器。显示器304显示网页、图像和其它信息。例如,采用用户设备106的用户可以使用显示器304来观看和/或以其它方式访问如图5所示的网站502。
[0058] 用户设备106可以通过直接(有线)链路或无线地连接至网络102。用户设备106可以具有用于显示信息的显示屏(未示出)。例如,用户设备106可以是个人计算机、膝上计算机、工作站、大型计算机、诸如无线电话的移动通信设备、个人数字助理、蜂窝设备、膝上计算机、笔记本、平板设备、电子书阅读器等。可以使用其它设备。
[0059] 图4示出了依据实施例的示例性网站提供者108的功能组件。网站提供者108包括处理器404和存储器406。网站提供者108可以包括图4中未示出的其它组件。网站提供者108可以托管网站502。网站提供者108可以包括服务器。在替选实施例中,网站502可以由另一设备和/或服务器托管。
[0060] 图5示出了依据实施例的在网页510上显示的多种字体。在一个实施例中,网站提供者108托管包括网页510的网站502。网页510为采用用户设备106的用户提供使用多种字体呈现的文本的视觉表示。在说明性实施例中,第一字体504可以被应用于网页510内的一部分文本;第二字体506可以被应用于网页510内的另一部分文本;并且第N字体508可以被应用于网页510内的另一部分文本。为了向用户显示使用诸如字体504、506或508的特定字体呈现的文本,用户设备106接收包含与特定字体相关的数据的相应字体文件。在字体文件被用户设备106从字体服务104接收和/或下载并且进行缓存或保存(例如,作为cookie)之后,网页510内包含的文本可以使用特定字体进行呈现。
[0061] 图6A示出了依据实施例的示例性字体文件210。字体文件210包含定义字体的一个或多个方面的数据。一些数据以一个或多个表进行组织。此外,字体文件中的一些数据是冗余的。在图6A的说明性实施例中,字体文件210包括多个表601-A、601-B、…、601-N(此后共同称作601)。多个表601中的每一个包括相应的冗余和非冗余数据。第一表(610-A)包括冗余数据602-A和非冗余数据603-A;第二表(610-B)包括冗余数据602-B和非冗余数据603-B;第N表(610-N)包括冗余数据602-N和非冗余数据603-N。在字体文件210中可以包括比图6A中所描绘的更少或更多的表。字体文件210中的一种或多种类型的冗余数据随后被称作冗余数据602。字体文件210中的一种或多种类型的非冗余数据随后被称作非冗余数据603。
[0062] 图6B示出了依据实施例的示例性冗余数据602。在该说明性实施例中,(字体表601-A中的)冗余数据602-A包括轨迹表604,并且(字体表601-B中的)冗余数据602-B包括边框605。在图6B的说明性实施例中,边框605包围字形和/或字母“A”。边框605可以包围多个相应字母/字符周围的多个边框。在一个实施例中,冗余数据602-B可以包括用于字形表内的字形的一个或多个边框。
[0063] 在图6B所描绘的说明性实施例中,表601-A包括冗余数据602,其包括轨迹表604,并且表601-B包括字形边框605。表601-A和表601-B可以包括构成字体文件210的字形表、轨迹表等中的一个或多个。
[0064] 在一个实施例中,轨迹表中的条目包括针对字形的条目。轨迹表604包括指示每个条目的位置(例如,起始位置)或定位的各个条目。例如,轨迹表可以指示针对字母“A”的条目在位置“X”开始。因此,字形以及其位于何处的检测能够基于轨迹表来执行。轨迹表604可以通过扫描字形表来得到。
[0065] 冗余数据的一些示例包括:
[0066] 字形的边框-其可以从字形轮廓数据得到;
[0067] 轨迹表-其可以通过顺序扫描字形表并且确定每种字形的大小来得到;
[0068] 名称表的冗余-例如,存在针对第一类型的操作系统(OS)和第二类型的OS的编码但是具有相同数据;
[0069] 一些标志和元数据的冗余-例如,垂直量度的三个集合;
[0070] “字符到字形索引映射”或“cmap”表的冗余-例如,如果存在类型12(4字节Unicode),则可以从其得到类型4(2字节Unicode位图或BMP);
[0071] 发布表的冗余-例如,能够从诸如字形列表之类的标准表得到多个条目;
[0072] “Kerning”或“紧排”表中的数据可能是冗余的,其具有字形定位(GPOS)表中的紧排信息;和
[0073] 合成字符中的字形引用。
[0074] 在一个实施例中,合成字符中的字形引用可以是标准的,例如“agrave”字符可以由“a”和“grave”组成。
[0075] 字体文件中可以包括其它类型的冗余数据。
[0076] 压缩
[0077] 当采用用户设备106的用户请求访问以观看网页510(例如,通过选择网页510的统一资源定位符,或者通过其它方法)时,用户设备106经由网络102传送请求以从字体服务104获取字体文件210。
[0078] 使用图7对字体服务104所执行的用于传送所请求的字体文件的步骤进行描述。图7是描绘依据实施例的传送压缩字体文件的方法的流程图。在步骤702,在字体文件的表中识别冗余和非冗余数据。在对字体文件210进行压缩之前,字体服务104识别表(例如,第一表601-A)内的冗余数据(例如,602-A)和非冗余数据(例如,603-A)。
[0079] 在步骤704,应用归零过程以替换所识别的冗余数据。字体服务104执行归零过程并且替换第一表601-A内所识别的冗余数据602-A。依据实施例,所选择类型的冗余数据被相应模式的零所替换。例如,轨迹表可以被第一预定数量的零所替换,边框可以被第二预定数量的零所替换,等等。如图6B所描绘的,假设冗余数据602-A包括轨迹表604。被识别为冗余数据的表示轨迹表604的数据被以预定模式进行排列的数据所替换。预定模式的无效数据可以包括预定数量的零。在一个实施例中,所识别的冗余数据利用预定数量的24个零或“0000000000000000”所替换,其对应于字体文件210的特定元素。图9中示出了已经被归零的冗余数据的示例。在一个实施例中,预定模式的无效数据906可以对应于图6B所描绘的轨迹表604。在另一个实施例中,冗余数据602还可以包括与字体文件210中的多个表中的至少一个中的字形相关联的至少一个边框605。
[0080] 在步骤706,对字体文件进行压缩以生成压缩字体文件。字体服务104应用熵编码器算法来压缩字体文件210。该熵编码器算法可以是多种熵编码器算法中的任意一种。这里对选择熵编码器算法的方法进行描述。在一个实施例中,在压缩之前执行归零过程。
[0081] 在步骤708,传送压缩字体文件。字体服务104经由网络将压缩字体文件传送至用户设备106。用户设备106可以对压缩字体文件进行缓存或存储(例如,在存储器306中)。用户设备106随后使用该字体文件来显示网页510。
[0082] 在一个实施例中,归零过程可以有利地使得压缩效率有所提高,产生更小的压缩字体文件。
[0083] 在一个实施例中,假设以偏移量2开始提供8字节的零。这种排列可以表示边框。然而,另一个位置的8字节的零则可以对应于另一项目。因此,冗余数据的位置可以被用来确定冗余数据的类型。具体地,字体文件内的其它数据被用来确定特定字形的边框数据在字体文件内的位置。
[0084] 冗余数据602-A包括以上所描述的任意类型的冗余数据。例如,在另一个实施例中,冗余数据602-A可以是与字形表中的字形相关联的边框。字体服务104因此利用与边框相关联的第二预定模式的数据替换边框。例如,字体服务104可以利用第二预定数量的零替换边框,并且随后对字体文件210进行压缩。字体服务104压缩字体文件210并且将压缩字体文件传送至用户设备106。
[0085] 在一个实施例中,规则集合包括用于压缩字体文件以及用于对压缩字体文件进行重构的步骤。例如,该规则集合可以指示如果包括24个零的模式与轨迹表相关联,则在重构阶段将24个零替换为轨迹表。在一个实施例中,字体服务104和用户设备106的压缩器和解压缩器分别同意该规则集合。压缩器对字体文件运行该规则集合,并且如果识别出冗余数据(例如,轨迹表),则执行归零过程。在一个实施例中,压缩器可以运行该规则集合并且在压缩之前执行归零过程。在可替换实施例中,另一个设备可以在压缩之前运行该规则集合。在一个实施例中,对字体文件中的所有数据进行分析以确定规则集合是否能够被应用于字体文件的任意部分。
[0086] 解压缩
[0087] 如图8的流程图中所描述的,压缩字体文件在用户设备106被接收并且被重构。图8是描绘依据实施例的对压缩字体文件进行重构的方法的流程图。在步骤802,接收包括压缩数据的压缩字体文件。包含字体文件210的压缩字体文件经由网络102而在用户设备106被接收。
[0088] 在步骤804,对压缩数据进行解压缩以生成解压缩数据。包括压缩数据的压缩字体文件210例如由用户设备106进行解压缩以生成解压缩数据。如图9所示,使用解压缩技术的用户设备106将压缩数据变换为解压缩数据902。依据一个实施例,解压缩步骤是熵编码器的解压缩步骤。
[0089] 在步骤806,尝试对解压缩数据进行验证。用户设备106对解压缩数据902进行解释以便验证该解压缩数据。在图9的说明性实施例中,用户设备106确定数据904包括有效解压缩数据。当尝试对解压缩数据902进行验证时,如步骤808中进一步描述的,检测无效数据(连同有效数据一起)。
[0090] 在步骤808,在解压缩数据内检测与字体文件元素相对应的预定模式的无效数据。在解压缩数据902内,用户设备106检测与字体文件210的元素相对应的预定模式的无效数据906。在图9的说明性实施例中,预定模式的“0000000000000000”对应于字体文件210的特定元素。例如,预定模式的无效数据906可以对应于冗余数据602。在一个实施例中,无效数据906例如指示图6B所描绘的轨迹表604。在一个实施例中,用户设备106中的lint工具可以检查解压缩数据902有效还是已经被归零。如果确定了解压缩数据902不是有效的并且已经被归零,则如步骤8010所描述的,对该数据进行重构。
[0091] 在一个实施例中,冗余数据可以与字体文件的元素相关联。在一个实施例中,该元素包括与字体文件中的字形相关联的边框605;以及轨迹表604中的至少一个。元素的其它示例包括名称表中的冗余;一些标志和元数据中的冗余;cmap表中的冗余;发布表中的冗余;紧排表中的数据;以及合成字符中的字形引用。
[0092] 在一个实施例中,该元素包括估计表604,其中该轨迹表包括在轨迹表内条目的起始位置的指示。该轨迹表可以通过扫描字形表来得到。
[0093] 依据一个实施例,字体(例如,OpenType字体或更为一般地,spline字体(SFNT)容器格式中的一种字体)可以包括表的集合。每个表可以具有4字节标签以及内容(例如,字节序列)。每个表可以包含字体的不同方面。例如,字形表可以包含字体中的字形的轮廓数据,而cmap表则可以包含字符映射信息。
[0094] 在步骤8010,通过将无效数据中的至少一些替换为元素而对字体文件进行重构。在图9-10的说明性实施例中,用户设备106可以通过将无效数据906中的至少一些替换为生成重构轨迹表1002的相关联元素(例如,轨迹表)来生成重构字体文件1001。在一个实施例中,可以使用协定启发式算法来执行重构。在一个实施例中,可以在重构步骤期间确保发生解压缩字体文件的有效性。
[0095] 在一个实施例中,当(例如,在用户设备106)重构压缩字体文件时,用户设备106可以执行一致性检查。如果数据字段不是有效的(由于其已经被归零),则用户设备106可以使用算法来重构任意缺失数据,同时确保其与字体文件中的其它数据相一致。如果数据不是冗余的,则传送非冗余数据而不对其应用归零过程。
[0096] 名称表中的冗余数据
[0097] 在一个实施例中,字体文件的名称表中的条目可能是冗余的。各种的族名称---其中的一些可以从基础名称以及字体中诸如权重的其它信息得到---可以包括冗余数据。此外,一些字体文件可以具有用于对权重、垂直量度等进行编码的多个冗余表。名称表可以随各种类型的OS编码出现。此外,即使当格式4的cmap表中的数据随另一个cmap表是冗余的时,也需要格式4的cmap表以符合OpenType规范。例如,字体可以针对扩展Unicode收敛而包含格式12的cmap表。
[0098] 当对数据应用过程(例如,归零过程)时,如果数据实际上不是冗余的(例如,如果权重变体名称是不常见的),则该数据被保留,而不是对其应用一个过程(例如,被归零)。
[0099] 例如,假设字体的名称不常见并且该字体的属性无法通过族名称和权重进行推导。该字体名称可以是“Fonty Fett”并且在字体名称中没有字体权重等的属性的指示。“Fonty Fett”可以具有族名称“Fonty”以及权重代码“700”(“加粗”)。在该实施例中,该字体名称不包含冗余数据,并且没有字体名称的部分被归零。
[0100] 当对应于“Fonty Fett”字体的字体文件被重构时,其导致可以在该字体被接受的所有上下文上所使用的有效字体。例如,该字体可以在OS中被接受而呈现堆叠、嵌入便携式格式化文件或者其它文件格式中,等等。在用户设备106进行解压缩的实施方式中,在数据从字体请求返回之后但是在使用该字体进行布局、呈现之前,该解压缩可以在对(冗余和非冗余)数据的单次操作中应用。在图5的说明性实施例中,字体文件210被用来在网站510上呈现文本。
[0101] 在一个实施例中,归零过程可能是有利的,因为重构字体可能具有更高程度的一致且有效的置信度。在一个实施例中,可以不使用归零过程来压缩任意字节序列,但是仅压缩有效字体。因此,归零过程可以仅对有效字体应用由此使得安全风险最小化。
[0102] 通过使用归零过程,占据字体文件中的空间的冗余数据得以被减少或消除。这进一步减少了字体文件传输的延迟。此外,通过使用归零过程,与伪装为无效字体的无效或恶意数据相关联的安全风险得以最小化。
[0103] 其它实施例
[0104] 在其它实施例中,请求字体文件的明确命令可以被传送至用户设备并且被用户设备接收。例如,当已经识别出冗余数据(例如,轨迹表)时,可以使用例如表达“轨迹表已经被移除”的明确命令,代替应用归零过程。
[0105] 在又另一个实施例中,可以从涂写(scratch)定义新的字体格式;其中该新的字体格式不具有现有字体格式所具有的相同冗余源。这样,可能获得与现有字体和格式相兼容的字体。
[0106] 在其它实施例中,可以对字体文件中的冗余数据应用过程组合。这些过程可以由任意设备(例如,利用浏览器的设备)或者任意供应字体文件的设备应用。此外,这些过程可以由存储字体文件的诸如用户设备106的本地机器应用。
[0107] 在一个实施例中,字体文件的压缩可以是透明且无损的(即,重新构成的字体文件在功能上应当等同于原有字体文件)。例如,重构的轨迹表1002可以等同或基本类似于轨迹表604。在一个实施例中,通过在字体文件压缩之前对字体文件应用诸如归零过程之类的过程。压缩字体文件的大小被减小。因此,可以提高向用户设备传递字体文件的速度,可以减小延迟并且可以提高整体效率。
[0108] 依据一个实施例,字体文件的字体格式是向后兼容的。例如,向后兼容性可以应用于由传真机、打印机等所使用的字体。
[0109] 可选择的熵编码
[0110] 字体文件可以包括多个表(例如,字形表、紧排表、cmap表等)。依据一个实施例,对于每个不同的表,可以选择适当的熵编码器并且使用其对表进行编码。例如,如果字体文件包括十二个表,则可能为每个表选择不同的熵编码器。在一个实施例中,可以确定相同的熵编码器可应用于且最佳适用于多于一个的表。在另一个实施例中,可以确定对于表中的一个(或多个)不需要熵编码器。
[0111] 依据图11所示的实施例,字体表210包括多个表1111-A,1111-B,…,1111-N。第一表(1111-A)、第二表(1111-B)和第N表(1111-N)随后共同被称作表1111。图12示出了可用于在对字体表进行编码时使用的多个熵编码器算法。这里将关于图13的流程图中所描述的步骤来对图11和12进行描述。
[0112] 图13是描绘依据实施例的应用熵编码器算法的方法的流程图。
[0113] 在步骤1302,接收对字体文件的请求,该字体文件包括第一字体表和第二字体表。在图1和11的说明性实施例中,字体服务104接收对包括第一字体表1111-A和第二字体表
1111-B的字体文件210的请求。该请求可以由用户设备106发起并且经由网络102发送。
[0114] 在步骤1304,基于第一字体表的特性从多种熵编码器算法中选择第一熵编码器。参考图12,基于第一字体表1111-A的一个或多个特性从其它熵编码器算法(例如,第二熵编码器算法1203-B,…,第N熵编码器算法1203-N)中选择第一熵编码器算法1203-A。根据一个实施例,字体文件210中的每个表可以具有不同的特性。
[0115] 在步骤1306,基于第二字体表的特性从多种熵编码器算法中选择第二熵编码器。基于第二字体表1111-B的一个或多个特性从其它熵编码器算法(例如,第一熵编码器算法
1203-A,…,第N熵编码器算法1203-N)中选择第二熵编码器算法1203-B。如这里所描述的,字体服务104可以执行该选择。第二熵编码器算法1203-B不同于第一熵编码器算法1203-A。
[0116] 在一个实施例中,在对字体文件210进行压缩之前,可以进行试验或测试以确定哪种熵编码器算法最佳地适用于多个表1111中的每一个。字体服务104在试验期间可以使用各种启发式算法或标准来确定要使用哪种熵编码器算法。这些标准可以包括各种类别,包括进行压缩的时间、网络延时以及进行解压缩的时间。对于每个表,可以选择使得标准的一个或多个类别最优化的算法。在一个实施例中,可以向字体文件210中的多个表1111中的每一个应用图12中的所有可用熵编码器算法1202,并且为每个字体表选择最佳的熵编码器算法。在另一个实施例中,所选择的字体表的特性可以被用来确定并收窄哪个(哪些)熵编码器算法是最为适合的。例如,对于第一表(1111-A),可以基于第一表(1111-A)的特性而确定第一熵编码器算法(1203-A)是最为适合的;并且对于第二表(1111-B),可以基于第二表(1111-B)的特性而确定第二熵编码器算法(1203-B)是最为适合的。类似地,对于每个其余的字体表,可以选择相应的熵编码器算法。
[0117] 在一个实施例中,字体表的特性也可以被用来确定哪个熵编码器算法是最优的。这些特性可以包括以下中的至少一个:字体表的原始大小;字体表在测试期间应用第一熵编码器之后的大小;第一字体表的类型;第一字体表的一个或多个内容变化;和第一字体表的重要性。字体表的类型包括以下中的一个:字形表;cmap表;紧排表;轨迹表;和名称表。字体表可以包括轨迹表,并且该轨迹表可以包括在该轨迹表内条目的起始位置的指示。
[0118] 例如,为了使得字体大小最小化,可以利用每种、一些或全部可用熵编码器算法来执行试验压缩。然后,可以选择出最优的熵编码器算法(例如,导致最小压缩大小的熵编码器算法)。如所描述的,该处理可以对于字体中的每个表进行一次。在对字体进行压缩时,字体服务104可以决定使用哪种熵编码器算法。
[0119] 在步骤1308,对第一字体表应用第一熵编码器。第一熵编码器算法1203-A被字体服务104应用于第一字体表1111-A,生成第一压缩数据。
[0120] 在步骤1310,对第二字体表应用第二熵编码器。第二熵编码器算法1203-B被字体服务104应用于第二字体表1111-B,生成第二压缩数据。
[0121] 相应地,当接收到对字体文件210的请求时,对于该字体文件中的每个字体表,选择熵编码器算法并且对其加以应用。每个表可以利用不同的低水平熵编码器算法进行压缩。
[0122] 在步骤1312,将与第一和第二字体表相对应的压缩数据进行组合以生成压缩字体文件。通过字体服务104将与第一字体表1111-A和第二字体表1111-B相对应的压缩数据组合以生成压缩字体文件。
[0123] 在步骤1314,传送该压缩字体文件。该压缩字体文件从字体服务104经由网络102被传送至用户设备106。在一个实施例中,如果在步骤1302处对字体文件的请求是对web字体文件的请求,则该web字体可以被存储在字体服务104上并且压缩的web字体文件可以在用户设备106进行请求时使用web协议(例如,超文本传输协议(HTTP))通过网络102被传送至用户设备106。用户设备106接收该压缩字体文件并且对其进行解压缩,并且使用该字体文件来显示文本。
[0124] 图14是描绘依据实施例的应用熵编码器算法的方法的流程图。
[0125] 在步骤1402,接收对包括字体表的字体文件的请求。在图1和11的说明性实施例中,字体服务104接收对包括第一字体表1111-A的字体文件210的请求。该请求可以由用户设备106发起并且经由网络102进行发送。
[0126] 在步骤1404,基于字体表的特性从多种熵编码器算法中选择熵编码器。基于第一字体表1111-A的一个或多个特性从其它熵编码器算法(例如,第二熵编码器算法1203-B,…,第N熵编码器算法1203-N)中选择第一熵编码器算法1203-A。根据一个实施例,字体文件210中的每个表关于压缩可以具有不同特性。
[0127] 在步骤1406,该熵编码器被应用于字体表。第一熵编码器算法1203-A被字体服务104应用于第一字体表1111-A。
[0128] 在步骤1408,生成压缩字体文件,其包括具有应用于其上的熵编码器的字体表。通过字体服务104生成包括第一字体表1111-A的压缩字体文件,第一字体表1111-A具有应用于其上的第一编码器算法1203-A。
[0129] 在步骤1410,传送压缩字体文件。该压缩字体文件经由网络从字体服务104传送至用户设备106。在一个实施例中,如果在步骤1302处的对字体文件的请求是对web字体文件的请求,则该web字体可以被存储在字体服务104上并且压缩的web字体文件可以在用户设备106进行请求时使用web协议(例如,超文本传输协议(HTTP))通过网络102被传送至用户设备106。
[0130] 为了字体服务104选择熵编码算法以对字体表内所包含的数据进行压缩,字体服务104可以进行一个或多个测试。例如,字体服务104可以对每个字体表应用各种编码算法或压缩算法以对每个字体表确定最优的熵编码算法。在一个实施例中,字体服务104可以应用一些或全部的熵编码算法以确定哪种熵编码算法对于特定字体表是最优的。此外,字体服务104可以使用特定字体表的某些特性来收窄全部编码方案的子集并且应用该子集。这可以对所有字体表进行重复。
[0131] 依据图12所描绘的实施例,选择第一熵编码器算法1203-A包括执行测试以将应用于第一字体表1111-A的第一熵编码器算法与应用于第一字体表1111-A的第二熵编码器算法1203-B进行比较。选择第一熵编码器算法1203-A还包括基于该测试确定第一熵编码器算法1203-A为对于第一字体表1111-A的最优编码器。
[0132] 在一个实施例中,该测试可以指示向第一字体表1111-A应用第一熵编码器算法1203-A提供第一字体表1111-A大小的减小。通过该测试还可以确定第一熵编码器算法
1203-A可以提供最大的大小减小并且在应用于第一字体表1111-A时可以具有优于其它熵编码器算法的额外优势。
[0133] 示例性编码方案
[0134] 根据一个实施例,一些表可以被组合为单个压缩流,使得对每个表建立单独的低水平压缩器的开销降低。可以使用两个级别的表结构来实施单一压缩流。第一级别的表可以是压缩流的序列,每个标识出所使用的熵编码器算法。第二级别的表可以包括用于字体中的每个表的条目,每个均由标签、使用哪个压缩流的标识符、到该流中的偏移量和长度构成。
[0135] 可以使用的一些其它编码方案包括:
[0136] Lempel–Ziv–Markov链算法(LZMA)算法
[0137] GNU zip(gzip)Burrows–Wheeler算法(bzip)和bzip2
[0138] Burrows–Wheeler算法(bzip)和bzip2
[0139] 通过HTTP的共享词典压缩(SDCH)
[0140] 对最优压缩的排序
[0141] 在一个实施例中,压缩的有效性可以取决于数据或对象在压缩流内出现的顺序。对数据的排序可以被应用而使得压缩最优化(例如,字体内的表,字体内的字形)。字形可以在不影响字体外观的情况下被重新排序,但是可能需要对表的号码重新编号以进行补偿。
作为说明性示例,如果具有曲线的字形被彼此分组在一起并且具有直线部分的字形也被彼此分组在一起则可能发生更好的压缩。因此,更为优化的字形顺序可以是
“AEFHIJKLMNTVWXYZBCDGOPQRSU”。如果在原始字体中,字形被编号为A=1,B=2,C=3,D=4,E=
5,等等。则在更为优化的字体中,字形将被重新编号为A=1,B=17,C=18,D=19,E=2,等等。引用个体字形的新字体中的所有表都必须被重新编号而使得在这样的表中,原始字体中对字形2(B)的引用在优化字体中变为对字形17的引用。这样的表的示例包括cmap(字符映射)、GSUB(字形替换)和GPOS(字形定位)。
[0142] 无编码
[0143] 依据一个实施例,响应于接收到对包括第三字体表(即,1111-N)的字体文件210的请求,字体服务104可以确定不应当应用压缩算法或熵编码器算法1202来对第三字体表1111-N进行编码。例如,没有熵编码器算法对于第三字体表1111-N是最优的。此外,字体服务104可以通过执行一个或多个测试来确定如果向包括第三字体表1111-N的数据应用任意一种熵编码算法,所导致的压缩数据将在大小方面与原始未压缩数据相比将会更大、等同或稍小。例如,如果第三字体表1111-N中所包含的数据小则可能会发生这样的状况,并且对数据进行压缩可能不节约很多空间或者在时间和成本方面并不值得对数据进行压缩。另外,第三表1111-N可能涉及到超时,并且虽然在过去值得使用编码算法对其中所包含的数据进行压缩,但是字体服务104考虑到所涉及的表可以确定不再值得压缩数据。因此,字体服务104确定没有任何熵编码被应用于第三字体表1111-N。
[0144] 解压缩
[0145] 包括压缩数据的压缩字体文件210例如被用户设备106进行解压缩以生成解压缩数据。用户设备106使用(与用来压缩数据的压缩技术相匹配的)解压缩技术将压缩数据变换为解压缩数据。用户设备基于压缩字体中存储的选择数据来选择熵编码器技术进行解压缩。由于不同熵编码技术对于字体内的不同表可能是最优的,所以依据一个实施例,用户设备基于字体中的多个选择数据条目来为每个表选择熵编码技术。
[0146] 在一个实施例中,由于解压缩可能耗费时间和中央处理单元(CPU)负载(例如,对于实现更高压缩比的更为先进的熵编码器算法而言),所以用户设备106可以在本地缓存中存储字体文件的非压缩版本。例如,如果用户设备106正在访问网站提供商108所托管的网站(通过选择、访问和/或点击浏览器302,和/或向浏览器302键入网站名称),则用户设备106可以将用来呈现网站上所包含文本的字体文件的非压缩版本存储在本地缓存(例如,存储器306)中以便减少时间。因此,在初始使用时,总体时间由于网络延时可以被最小化所以能够进行优化,并且在后续从缓存使用时,总体时间可以由于字体文件将已经是非压缩的而可以有所优化。
[0147] 字体文件可以在服务器侧进行压缩,并且字体文件可以在浏览器中解压缩。这例如可以被移动电话和/或移动浏览器在平台或者诸如图书阅读器的应用中使用。
[0148] 使用web字体可以使得能够有比过去视觉上更为丰富且具有语意含义的网站,而这需要字体被预先安装在用户系统上并且被限于预先安装的字体。
[0149] 每个表的共享词典编码
[0150] 依据一个实施例,可以对字体文件中的每个表运行单独的平缓(flate)(gzip)流。
[0151] 通过HTTP的共享词典压缩可以预先为压缩词典播种有可能出现在流中的串。在压缩期间,对该串进行引用。在一个实施例中,SDCH可以在字体服务104和用户设备106之间共享。SDCH例如可以将一部分串分配给数字代码。如果串是短语,则该短语可以被代码“110”替代。使用SDCH的字体服务104和用户设备106辨识出代码“110”每次被使用都引用该短语。
[0152] 可以使用其它技术以便提高压缩效率。依据一个实施例,可以对每个字节流使用共享初始概率图表。如图11所示,第一表(1111-A)、第二表(1111-B)和第N表(1111-N)中的每个包括相应的字节流1114-A、1114-B和1114-N。基于字节流1114-A、1114-B和1114-N的特性进行预定计算。每个字节流可以包括数据。该数据可以以任意形式表示。在一个实施例中,该字节流包括多个数位并且其中该多个数位由二进制数字系统表示。因此,该字节流可以包括多个数位。
[0153] 图15是描绘依据实施例的使用算术编码方案对字体文件进行压缩的方法的流程图。这里将参考图11和16对图15的流程图进行描述。
[0154] 在步骤1502,接收对包括字体表的字体文件的请求。从用户设备106经由网络102所发送的对字体文件210的请求在字体服务104被接收。如图11和16所描绘的,字体文件210包括第一表1111-A,其包括字节流1114-A。在图16所描绘的实施例中,字节流1114-A可以包括某些数位模式(1601、1602、1603和1604)。
[0155] 在步骤1504,获取与该字体表相关联的共享初始概率图表,其中该共享初始概率图表包括基于所要压缩的字体表中的字节流的初始概率估计。与第一字体表1111-A相关联的共享初始概率图表1610由字体服务104获取。共享初始概率图表1610包括基于所要压缩的字体表210中的字节流1114-A的初始概率估计1621。该共享初始概率图表(或预先播种的概率图表)例如在压缩前使用以便提高压缩效率。
[0156] 用于算术编码和压缩的预先播种的概率图表
[0157] 用于算术编码和压缩的初始概率图表或预先播种的概率图表是一种可作为SDCH的变体的编码方案。在一个实施例中,当开始每个流(例如,每个表1111)的压缩时,将范围编码器的概率表初始化为已经依据经验确定(例如,通过对所要压缩的流的语料库进行分析)为最优值的值。在一个实施例中,共享初始概率图表可以在字体服务104和用户设备106之间进行共享。字体文件210中的每个表可以具有包括共享初始概率图表的唯一词典。
[0158] 在一个实施例中,共享初始概率图表包括可以通过分析与所要压缩的字节流内的0和1比特相关联的概率来得到的初始概率估计。该初始概率估计可以使用算术编码得到。
[0159] 算术编码
[0160] 某些模式可能出现在字节流1114-A中。例如,当字节流1114-A由二进制数字系统表示时,可能有包含在字节流中的某种模式的0和1。因此,存在与字节流中所包含的每个数位相关联的概率。例如,存在数位或比特将为1的概率以及该比特将为0的概率。与字节流相关联的数位的概率被称为初始概率估计。如图16所描绘的,在初始概率图表1610中,存在与字节流1114-A中的第一数位1601相关联的初始概率估计1621(例如,该数位将为“0”的概率20%)。此外,这指示了存在该数位将为“1”的概率80%。替选地,初始概率估计可以指示数位为“1”的概率或者可以包括该数位为“0”或者“1”的概率。在另一个实施例中,在使用不同基数(例如,非二进制)数字系统的情况下,初始概率估计可以包括与两个或更多数位相关联的概率。如这里所描述的,字节流中的多个数位中的一个的概率被自适应地计算。
[0161] 参考图16,初始概率图表1610通过初始概率估计1622指示字节流1114-A中的第二数位1602有95%可能为数位“0”。初始概率估计1622基于各种因素计算。在一个实施例中,因素中的一个可以是该字节流中的之前数位的状态。
[0162] 类似地,初始概率图表1610通过初始概率估计1623指示字节流1114-A中的第三数位1603有87%可能为数位“0”。如字节流1114-A所示出的,该估计是准确的。
[0163] 然而,该估计可能并非始终是准确的。初始概率图表1610通过初始概率估计1624指示字节流1114-A中的第四数位1604有35%可能为数位“0”。因此,该第四数位1604更可能为数位“1”。然而,该估计并不准确,因为第四数位1604实际上为数位“0”。在确定估计中的错误之后,对算术编码方案进行适当调节以便确定对应于后续数位的概率估计。
[0164] 自适应算术编码
[0165] 在一个实施例中,通过对字节流1114-A进行分析,某些模式可以被检测并且被用来自适应地计算概率。例如,如果在模式中检测到多个“0”数位,则该编码自适应地学习到在该模式结束之后,下一个数位为“1”的概率为0-P,其中P是下一个数位将为“0”的概率。自适应算术编码可以先验的。也就是说,自适应算术编码基于直到当前数位的相对数位序列已经成为的内容而随时间估计下一个数位的概率。
[0166] 返回参考图15,在步骤1506,基于初始概率估计对字节流进行压缩以生成压缩字体表。字节流1114-A(具体地是第一数位1601)由字体服务104基于初始概率估计1621进行压缩以生成压缩字体表。
[0167] 共享初始概率图表1610在对包括字节流1114-A的第一字体表1111-A的压缩期间被使用。初始概率估计1621可以基于字节流1114-A。在一个实施例中,字体表210中的每个表可以使用对应于相应表的共享初始概率图表以相似方式进行压缩。字体服务104和用户设备106可以关于共享初始概率图表进行协定以应用于每种类型的表。例如,在字体文件中可能有多个表并且每个表(例如,轨迹表、字形表等)可以使用唯一的初始概率图表。在一个实施例中,可以确定所有类型的某种表(例如,所有轨迹表)可以使用相同的初始概率图表;并且所有字形表使用与用于其它类型的表(例如,轨迹表,cmap表等)的初始概率图表不同的相同初始概率图表。
[0168] 为了为某种类型的表确定最优的初始概率图表,可以对字体表(例如,轨迹表)应用算术编码算法。该算术编码算法因此可以被应用于不同字体文件的相同类型的字体表(例如,轨迹表)。对于所测试的所有字体表确定自适应概率计算并且取所有相同类型的字体表的平均值。该平均值然后被用来构建初始概率图表。该平均值指示更为准确的概率估计,因为它是对相同类型的若干字体表运行算术编码算法的结果。在一个实施例中,对于任意字体文件的该特定类型的字体表(例如,轨迹表)的每个实例使用初始概率图表。如以上所描述的,该初始概率图表在字体服务104和用户设备106之间进行共享。
[0169] 字体服务104已了解包含在字节流内的实际数位。然而,用户设备106不知道该实际数位,而是使用初始概率图表来估计该数位的概率。因此,字体服务104和用户设备106协定包含初始概率图表的初始SDCH词典以便对压缩/解压缩进行初始化。
[0170] 在替选实施例中,包含初始概率图表的新词典可以从字体服务104传送至用户设备106。这例如可以在进行更新并且字体服务104希望与用户设备106同步新数据和/或新算法的情况下进行。
[0171] 在一个实施例中,用于每个表的共享初始概率图表可以是唯一的。在压缩之后,压缩字体表然后可以被组合以生成压缩字体文件。
[0172] 在步骤1508,传送该压缩字体文件。字体服务104经由网络102将该压缩字体文件传送至用户设备106。用户设备106可以将压缩字体文件进行缓存或存储(例如,在存储器306中)。
[0173] 在一个实施例中,通过使用初始概率估计,字节流1114-A的压缩效率有所提高并且概率估计因此被更新。字节流1114-A基于初始概率估计进行压缩以生成压缩字体表。
[0174] 解压缩
[0175] 当用户设备106接收到已经对其应用了算术编码的压缩字体数据时,对该压缩字体数据进行解压缩。图17描绘了依据实施例的使用算术编码方案对字体文件进行解压缩的方法。
[0176] 在步骤1702,接收压缩字体表。用户设备106接收该压缩字体表。例如,用户设备106可以在请求字体文件210之后接收压缩字体表,其包括第一字体表1111-A的压缩版本。
用户设备106可以请求压缩字体表以向采用用户设备106的用户提供图5所示的网页510的显示。用户可能希望观看使用包含该字体的字体文件所呈现的文本。
[0177] 在步骤1704,获取与压缩字体表相关联的共享初始概率图表,其中该共享初始概率图表包括基于压缩字体表中的字节流的初始概率估计。在用户设备106获取与压缩字体表相关联的共享初始概率图表1610。共享初始概率图表包括基于第一压缩字体表中的字节流1114-A的初始概率估计。共享初始概率图表1610可以在用户设备106和字体服务104之间进行共享并且可以由用户设备106在本地进行缓存。
[0178] 在步骤1706,基于初始概率估计对字节流进行解压缩以生成解压缩字体表。如图18所示,基于(初始概率图表1610中所示的)初始概率估计对字节流1814进行解压缩以生成解压缩字体表1811。
[0179] 在解压缩的同时,初始概率估计对压缩字体数据中的第一数位的概率进行估计。落在第一间隔之间的任意数字等于第一数位,而落在第二间隔之间的任意数字则等于第二数位。例如,落在1和0.8之间的任意数字将为数位“0”而落在0.8和1之间的任意数字将为数位“1”。通过估计数位的概率对压缩字体数据进行解压缩。由于概率仅是估计而并不是数位的实际识别,因此可能会有不准确估计的机会。假设形成了数位为数位“0”或数位“1”的不准确估计,则不准确估计的成本会是最低的。
[0180] 在一个实施例中,如果初始概率表在字体服务104和用户设备106之间进行共享,则相同的初始概率估计则至少在最初被应用于压缩数据。因此,用户设备106使用共享初始概率表对字体文件进行解码和推导。
[0181] 用户设备106使用解压缩的字体文件来显示文本。例如,解压缩的字体表1811被用来提供使用网页(例如,图5中的网页510)内的字体呈现的文本的显示。在一个实施例中,表1811基本上类似于表210。因此,在接收字体表中存在最小化(或没有)误差。
[0182] 通过使用自适应算术编码,字体的压缩可以通过提供较小的压缩字体文件而节约空间。这可以使得通过网络传输字体的延时较小。此外,这会加速压缩和解压缩,同时呈现包含字体的复杂文档或网站。这尤其可应用于web字体。当然,自适应算术编码和共享初始概率图表可以被用于提供字体以外的其它用途。例如,其可以被用来对应用包文件内的不同元素进行压缩。根据一个实施例,一个初始概率表可以被用于XML资源数据,而另一个则被用于Dalvik可执行(.dex)文件,并且再另一个则被用于诸如图像的资产。
[0183] 在各个实施例中,这里所描述的包括图7、8、13、14、15和17中所描述的方法步骤在内的方法步骤可以以与所描述或示出的特定顺序不同的顺序来执行。在其它实施例中,可以提供其它步骤,或者可以从所描述的方法中消除步骤。
[0184] 这里所描述的系统、装置和方法可以使用数字电路来实施,或者使用一个或多个使用公知计算机处理器、存储器单元、存储设备、计算机软件和其它组件的计算机来实施。通常,计算机包括用于执行指令的处理器以及用于存储指令和数据的一个或多个存储器。
计算机还可以包括或者耦接到一个或多个大容量存储设备,诸如一个或多个磁盘、内部硬盘和可移动潘、磁光盘、光盘等。
[0185] 这里所描述的系统、装置和方法可以使用以客户端-服务器关系进行操作的计算机来实施。通常,在这样的系统中,客户端计算机远离服务器计算机并且经由网络进行交互。客户端-服务器关系可以由运行在相应客户端和服务器计算机上的计算机程序定义和控制。
[0186] 这里所描述的系统、装置和方法可以在基于网络的云计算系统中使用。在这样的基于网络的云计算系统中,服务器或者连接到网络的另一处理器经由网络与一个或多个客户端计算机进行通信。客户端计算机例如可以经由驻留在客户端计算机上并在其上操作的网络浏览器应用与服务器进行通信。客户端计算机可以将数据存储在服务器上并且经由网络访问该数据。客户端计算机可以经由网络向服务器传送对数据的请求或者对在线服务的请求。该服务器可以执行所请求的服务并且向客户端计算机提供数据。服务器还可以传送适于使得客户端计算机执行指定功能的数据,例如执行计算、在屏幕上显示指定数据等。例如,服务器可以传送适于使得客户端计算机执行这里所描述的包括图7、8、13、14、15和17的一个或多个步骤在内的一个或多个方法步骤的请求。这里所描述的包括图7、8、13、14、15和17的一个或多个步骤在内的某些方法步骤可以由基于网络的云计算系统中的服务器或另一个处理器执行。这里所描述的包括图7、8、13、14、15和17的一个或多个步骤在内的某些方法步骤可以由基于网络的云计算系统中的客户端计算机来执行。这里所描述的包括图7、8、
13、14、15和17的一个或多个步骤在内的方法步骤可以由基于网络的云计算系统中的服务器和/或客户端计算机以任意组合形式来执行。
[0187] 这里所描述的系统、装置和方法可以使用有形地实现于例如非易失性机器可读存储设备的信息载体中的计算机程序产品来实施,例如由可编程处理器来执行;并且这里所描述的包括图7、8、13、14、15和17的一个或多个步骤在内的方法步骤可以使用可由这样的处理器执行的一个或多个计算机程序来实施。计算机程序是能够在计算机中直接或间接地使用来执行某个活动或者导致某个结果的计算机程序指令的集合。计算机程序可以以任意形式的编程语言进行编写,包括编译或解释语言,并且其能够以任意形式进行部署,包括作为独立程序或者作为用于在计算环境中使用的模块、组件、子例程或其它单元。
[0188] 图19中图示了可以用来实施这里所描述的系统、装置和方法的示例性计算机的高级别框图。计算机1900包括操作地耦接至数据存储设备1902和存储器1903的处理器1901。处理器1901通过执行定义这样的操作的计算机程序指令来控制计算机1900的整体操作。计算机程序指令可以存储在数据存储设备1902或者其它计算机可读介质中,并且在期望执行计算机程序指令时被加载到存储器1903中。因此,图7、8、13、14、15和17的方法步骤能够由计算机程序指令定义,所述计算机程序指令存储在存储器1903和/或数据存储设备1902中并且由执行该计算机程序指令的处理器1901控制。例如,计算机程序指令可以被实施为由本领域技术人员进行编程以执行图7、8、13、14、15和17的方法步骤所定义的算法的计算机可执行代码。因此,通过执行计算机程序指令,处理器1901执行图7、8、13、14、15和17的方法步骤所定义的算法。计算机1900还包括用于经由网络与其它设备进行通信的一个或多个网络接口1904。计算机1900还包括使得用户能够与计算机1900进行交互的一个或多个输入/输出设备1905(例如,显示器、键盘、鼠标、扬声器、按钮等)。
[0189] 处理器1901可以包括通用和专用微处理器,并且可以是计算机1900的单个处理器或多个处理器之一。处理器1901例如可以包括一个或多个中央处理单元(CPU)。处理器1901、数据存储设备1902和/或存储器1903可以包括一个或多个专用集成电路(ASIC)和/或一个或多个现场可编程门阵列(FPGA),被它们补充或者结合于其中。
[0190] 数据存储设备1902和存储器1903每一个包括有形的非易失性计算机可读存储介质。数据存储设备1902和存储器1903每一个可以包括高速随机存取存储器,诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、双倍数据速率同步动态随机存取存储器(DDRRAM)或者其它随机存取固态存储设备,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备,诸如内部硬盘和可移动盘、磁光盘存储设备、光盘存储设备、闪存设备、半导体存储器设备,诸如可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、压缩盘只读存储器(CD-ROM)、数字多功能盘只读存储器(DVD-ROM)或者其它非易失性固态存储设备。
[0191] 输入/输出设备1905可以包括诸如打印机、扫描仪、显示屏等的外围设备。例如,输入/输出设备1905可以包括诸如阴极射线管(CRT)或液晶显示器(LCD)监视器之类的用于向用户显示信息的显示设备、键盘以及诸如鼠标或轨迹球之类的用户能够通过其向计算机1900提供输入的指示设备。
[0192] 包括字体服务104、网站提供者108、用户设备106在内的任意或所有在此讨论的系统和装置及其包括处理器204、存储器206、数据库208、字体文件210、浏览器302、显示器304、存储器306、处理器404和存储器406的组件可以使用诸如计算机1900的计算机来实施。
[0193] 本领域技术人员将会认识到,实际计算机或计算机系统的实施方式可以具有其它结构或者还可以包含其它组件,并且图19是用于说明目的的这样的计算机的一些组件的高级别表示。
[0194] 以上详细描述应被理解为在每个方面都是说明性和示例性而并非是限制性的,并且这里所公开的本发明的范围并非从详细描述进行确定,而是从如根据专利法所允许的完全宽度进行解释的权利要求所确定。所要理解的是,这里所示出并描述的实施例仅是本发明的原理的说明并且本领域技术人员可以实施各种修改而并不背离本发明的精神和范围。本领域技术人员能够实施各种其它特征组合而并不背离本发明的精神和范围。