使用压缩机制来获取字体部分的制作方法

文档序号:11386480阅读:219来源:国知局
使用压缩机制来获取字体部分的制造方法与工艺

本公开涉及使用压缩机制来获取字体部分。



背景技术:

因特网、尤其是万维网(www)或者web使许多服务能够被跨全球提供。服务的两个示例是通信和商务。为具有多个不同教育水平、审美偏好、语言能力等的web用户和在这些web用户之间提供这些和其他服务。因此,web已经被适配为适应来自不同国家或者在不同文化中生活的人们的广泛多样性。

web的一个适应性是使用许多不同字体的能力。字体是表示数字字样的实例的数字文件或者代码。字样的示例包括courier、helvetica、literata、timesnewroman和bookerly。字体的示例是表示字样的样式、诸如粗体helvetica的文件(例如“helvetica-bold.otf”)。每个字体体现唯一样式并且经常是为一个或者少数有关语言而设计的。给定电子字体或者字体系列可以具有用于不同点大小、诸如粗体或者斜体的各种效果等的选项。使用选择的字体,计算应用可以使字符被呈现在电子设备的显示屏幕上作为与字符分别对应的字形。例如web浏览器可以使用本地存储的字体在智能电话的屏幕上显示来自web页面的文本。

为了适应全世界人们的语言和文化的多样性,已经创建许多不同字体。现有字体的多样化使不同语言和文化的人们以他们自己的方式享用web。为了实现这一点,一个字体可以明显地不同于另一字体。另外,字体的定义可以不仅包括对如何形成个别字符的说明,而且包括对每个字符如何与其他字符有关或者交互的说明。字体定义因此可能很大并且消耗大量数据,这带来对电子设备的存储和传输带宽能力二者的需求。因此,个别电子设备仅能存储有限数目的字体定义。此外,向终端用户设备传达字体定义以使字符能够使用字体来显示引起使终端用户心烦的可感知时间延迟。另外,有了诸如与许多蜂窝服务计划的计量连接,财务约束可能也阻碍下载不同字体、因此阻碍使用这些字体。



技术实现要素:

描述使用压缩机制来获取字体部分。终端用户设备可以遇到文本内容,该文本内容具有指定的字体的在终端用户本地不存在的多个字符。每个个别字符具有可视地可辨认形式,该可视地可辨认形式向查看者示意与字符对应的字形的含义。字符可以例如包括字母表的字母、象形文字、标点、表情符、文本单位或者可以使用计算设备来编码为文本的任何其他人类可读或者可解释形式。对照而言,字形是如经由字体供应的编码的字符的具体表现或者图形表示。

取代获得指定的字体的全部,终端用户设备对于字体请求使用压缩机制来获取字体的一部分以节省时间和减少传输带宽。终端用户设备向字体贮存库发送具有枚举缺失字符的压缩表示的字体请求。作为响应,字体贮存库返回用于缺失字符的字体描述,该字体描述包括描述与请求的字符对应的字形的数据。如果没有指定的字体的一部分先前存在于终端用户设备,则用于对应字形的数据被用于建立用于指定的字体的新本地字体。然而,如果指定的字体的某个部分已经存在于终端用户设备,则添加用于对应字形的数据以便扩充现有本地字体。

更具体地,在用于终端用户设备的某些示例实施例中,字体实例化模块确定多个字符,这些字符形成用于特定字体的字体定义的一部分并且将用于渲染对应字形。字体实例化模块查明与多个字符分别对应的多个代码点、诸如unicode代码点值。基于多个代码点计算多个字符的压缩表示。字体实例化模块可以例如使用就包含而言无损的一个或者多个散列化函数来计算压缩表示。因此,解码压缩表示可以在字体贮存库产生误报(falsepositive),但是不允许漏报(falsenegative)。换而言之,终端用户设备打算请求的如由代码点表示的每个字符响应于压缩表示以对应字形数据的形式由字体贮存库返回。然而,也可以返回用于附加的未打算的字符的字形数据。压缩表示可以被实施为例如概率数据结构、诸如bloom过滤器。

终端用户设备向字体贮存库传达包括压缩表示的字体请求。字体请求可以被实施为例如使压缩表示嵌入在其中的url。响应于传输字体请求,终端用户设备从字体贮存库接收与压缩表示对应的字体描述。在终端用户设备处的字体实例化模块使用字体描述以产生包括至少用于请求的字符的字形数据的本地字体。字体描述可以用于建立具有完整字体定义的子集的新本地字体,或者字体描述可以用于通过根据作为字体描述的一部分而接收的扩充指令向现有本地字体添加字形数据来扩充现有本地字体。

在用于服务器设备的某些示例实施例中,服务器设备从终端用户设备接收与对于特定字体定义正在被请求的多个字符对应的压缩表示。字体实例化模块解码压缩表示以标识多个代码点。例如字体实例化模块可以向字体定义中的代码点集合的每个代码点应用编码过程并且确定编码结果是否与压缩表示一致。如果字符的对应代码点的编码结果匹配在压缩表示中包括的字段,则字符视为被请求。虽然视为被请求的每个字符或者代码点可能实际上没有被终端用户设备打算请求,但是用于具有匹配编码结果的每个字符的每个分析的代码点应当被视为如此。换而言之,即使也返回用于一些附加的、未请求的代码点的字形数据,服务器设备仍然将返回与看来实际上被请求的每个代码点对应的字形数据。

服务器设备的字体实例化模块查明与具有匹配编码结果的多个代码点对应的多个字符。字体模块实例化模块访问字体定义以提取用于多个查明的字符的多个字体属性。例如可以提取字形的矢量表示、在字形之间的恰当间距或者字体定义中的字形顺序作为字体属性。字体实例化模块基于多个提取的字体属性准备与压缩表示对应的字体描述。字体描述包括使终端用户设备能够渲染多个字符的、作为在终端用户设备处的本地字体的一部分的字形数据。在字体扩充场景中,字体描述也可以包括用于向现有本地字体中注入附加字形以维持总体字体可用性的至少一个扩充指令。在准备字体描述之后,服务器设备向终端用户设备传输字体描述。

这一发明内容以简化的形式介绍以下在具体实施方式中进一步描述的概念的选择。这样,这一发明内容未旨在于标识要求保护的主题的实质特征、也未旨在于在确定要求保护的主题的范围时用作辅助。

附图说明

参考附图描述具体实施方式。在各图中,参考标号的一个或两个最左数字标识该参考标号在其中首次出现的图。在描述和各图中在不同实例中使用相同参考标号可以指示相似或者相同项目。在各图中表示的项目可以指示一个或者多个项目,因此可以在描述中可互换地指代项目的单数或者复数形式。

图1图示用于示例实施例的环境,这些实施例可操作用于采用这里描述的涉及使用压缩机制来获取字体部分的技术。

图2图示拥有具有示例应用的终端用户设备的显示场景,该应用以不同字体渲染字符作为对应字形。

图3描绘其中终端用户设备能够响应于字体请求从服务器设备获取字体的一部分的示例场景。

图4图示由终端用户设备用于生成字体请求的示例方式。

图5图示由服务器设备用于生成字体描述以对字体请求做出响应的示例方式。

图6描绘其中终端用户设备能够在字体扩充情形中从服务器设备获取字体的一部分的示例场景。

图7是图示根据一个或者多个示例实施例的用于终端用户设备的示例程序的流程图。

图8是图示根据一个或者多个示例实施例的用于服务器设备的示例程序的流程图。

图9图示包括两个示例设备的各种部件的示例系统,这些设备可以被采用于使用压缩机制来获取字体部分的一个或者多个实施例。

具体实施方式

概述

网站创建者、诸如web设计者和web开发者努力制造吸引目标受众的web页面。网站创建者经常为目标受众的文化、国家或者审美敏感性定制网站。一种方式是部署最新web技术中的一些web技术,使得网站可以用看来现代和遵从最新web有关趋势的方式动态地呈现内容。另一种方式包括采用目标受众熟悉或者与在目标受众的心中的希望的图像匹配的字体。可以在年龄、爱好、优选语言、出生文化、居住或者出身国家、达到的教育水平、经济群体等方面定义目标受众。

因此,选择适当字体可能需要考虑许多不同因素。例如可以考虑将传达由目标受众阅读的希望图像或者语言的样式。作为另一因素,可以在字体唯一性与阅读简易性之间做出折衷。另外,可以考虑期望消费设备——诸如智能电话或者桌面型计算机。已经产生多个字体以适应这些各种因素。事实上,存在如今在web上使用的数以千计的不同字体。为了设备根据给定字体渲染字形(例如具体字符形式),设备使用用于字体的字体定义的本地存储的版本。然而,完整字体定义可能占用许多兆字节的数据。例如用于基于象形文字的语言的完整字体定义可能占用近似地20兆字节。因此,消费者电子设备、尤其是便携或者低资源设备不能容易地存储用于多个字体的完整字体定义,更不用说用于在web上使用的字体中的每个字体的完整字体定义。

因此已经使用web技术来建立规定以使字体定义能够对于给定网站按照需求来下载。在实践中,在字体贮存库、诸如具有对存储许多字体的数据库的访问的web服务器处的云中存储多个字体定义。作为web页面的一部分而包括的代码片段可以请求来自字体贮存库的字体定义的至少一部分。例如web页面的一部分可以包括javascript,该javascript如果由浏览器执行,则联系至少一个web服务器以取回字体定义用于在渲染字形以显示web页面中由web浏览器使用。

如果希望完整字体定义,则代码片段可以仅按照名称、字母数字代码或者相似字体标识符标识请求的字体。然而,如果希望字体子集或者字体扩充,则枚举将被请求的个别字符。如果仅希望少数字符,则向web服务器提交枚举请求的具体字符的请求通常地并非难事。在另一方面,如果请求许多字符,则出现困难。如果web页面使用多个不同字体或者如果字体包含数以千计的字符、诸如用于一些基于象形文字的亚洲语言、如中文、韩文和日文的字符,则可能出现其中请求许多字符的情形。

使用web技术,经常使用统一资源定位符(url)请求资源。url至少为了可靠使用而具有有限最大长度。因为在web上的一些web服务器和一些代理服务器在更旧标准之下操作以及因为一些更旧浏览器仍然在使用中,所以出现这一限制。例如如果希望字体的四百个个别字符并且每个字符由四个数字(例如四位数)标识,则用于希望的字符的基于url的请求将超过用于更旧web服务器和代理服务器的url的最大长度。存在可能改善这一限制的多个可能方式,但是每个这样的方式引入新问题。接着描述两个具体问题方式以及影响采用这两个方式的原因。

利用第一问题方式,可以将希望的个别字符分离成联合地或者组合包括所有希望的个别字符的多个组。然后可以向字体贮存库做出用于多个组中的每个组的分开的请求。然而,这样的多个分开的请求增加通过在能够显示web页面之前从远程源获得字体部分而引起的延迟。另外,多个分开的请求增加在多个字体部分被接收和合并到在终端用户设备处的本地字体中时引入错误的可能性。

利用第二问题方式,可以将用于字体的请求有效地划分成两个阶段。在第一阶段中,在终端用户设备处的web浏览器使用第一通信向第一web服务器枚举希望的字符。在第二阶段中,web浏览器参考位于第一web服务器处的对希望的字符的枚举使用第二通信向充当字体贮存库的第二web服务器做出请求。在使用第三通信联系第一web服务器之后,第二web服务器可以向web浏览器提供请求的字符。因此,这一第二方式也需要在可以下载和使用字体部分之前引入附加延迟的多个通信。另外,联系两个不同web服务器,这使过程变复杂并且可能造成错误。

从更为技术的观点来看,在因特网上的更旧web服务器和代理服务器不能处理超过2,048个字符的url。因为在因特网上的通信的路径为非确定性的,所以通信将要行进经过的代理服务器不可预测。因此,为了实施用于字体获取的可靠方案,将遵从2,048个字符的限制。一种用于标识不同字符的方式是使用与每个相应字符对应的unicode代码点。unicode代码点值可以各自是四个字符长并且被逗号分离。400个唯一unicode代码点的列表如果被合并到url中,则因此将造成不少于2,000个字符的url。因此,鉴于仍然可能在web上遇到的更旧web和代理服务器,将unicode代码点直接地合并到url中不会产生可靠方案。

关于以上描述的第二问题方式,不能满足用于字体部分的请求的unicode代码点的枚举由客户端应用、诸如执行来自web页面的脚本的web浏览器编译。因为该请求的长度潜在地太长而无法安全地包括在url中,所以作为第一阶段的一部分,web浏览器代替地首先向第一web服务器做出超文本传送协议(http)post请求以定义unicode列表。httppost请求消息要求web服务器接受和存储在请求消息的主体中装入的数据。httppost请求消息不会受阻于与url相同的大小限制,因为在url中完全没有包括数据。unicode列表可以被散列化,并且然后与密钥捆绑作为httppost请求的一部分。作为第二阶段的一部分,密钥可以后续地用于请求来自第二web服务器的具体字体部分。第二web服务器可以使用密钥从第一web服务器获得unicode列表。遗憾的是,这一两阶段过程效率低。

对照而言,根据这里描述的一个或者多个实施例,单阶段方式可以利用一个url以基于压缩机制获取字体的一部分。在web浏览场景中,web浏览器创建希望的字符、诸如与将在显示屏幕上被渲染的字形对应的那些字符的列表。web浏览器压缩与希望的字符对应的标识代码点的列表以生成希望的字符的压缩表示。web浏览器在url中嵌入压缩表示并且向充当字体贮存库的web服务器发送url。字体贮存库接收url,并且然后提取和解码压缩表示。web服务器查明与解码的代码点对应的那些字符并且准备字体描述,该字体描述具有用于渲染与查明的字符对应的那些字形的字形数据。web服务器向web浏览器传输字体描述用于在渲染包括请求的字符的文本中使用。

更具体地,在用于终端用户设备的某些示例实施例中,计算应用确定形成具体字体定义的一部分的多个字符是渲染电子文件、诸如文档而希望的。计算应用查明(例如收集)与多个希望的字符分别对应的多个代码点、诸如多个unicode代码点值。基于多个代码点计算多个字符的压缩表示。可以例如使用就包含而言无损的一个或者多个散列化函数来计算压缩表示。因此,解码压缩表示可以在字体贮存库处产生误报,但是不允许漏报。换而言之,将由字体贮存库返回每个打算的请求的字符,但是也可以返回附加的未打算的字符。可以实施压缩表示为概率数据结构、诸如bloom过滤器。

终端用户设备向字体贮存库传达包括压缩表示的字体请求。可以实施字体请求例如为使压缩表示嵌入在其中的url。响应于传输字体请求,终端用户设备从字体贮存库接收与压缩表示对应的字体描述。计算应用使用字体描述以产生包括至少用于有意地请求的字符的字形数据的本地字体。字体描述可以用于建立具有完整字体定义的子集的新本地字体,或者字体描述可以用于通过向现有本地字体添加字形数据来扩充本地字体。

此外,在用于服务器设备的某些示例实施例中,服务器设备从终端用户设备接收与形成字体定义的一部分的多个字符对应的压缩表示。服务器设备解码压缩表示以标识多个代码点。例如服务器设备可以向代码点集合的每个代码点应用编码过程并且确定编码结果是否与压缩表示一致。如果测试的编码结果匹配在压缩表示中包括的代码点,则对应字符视为被请求。虽然视为被请求的每个字符可能实际上没有被终端用户设备打算请求,但是与具有匹配编码结果的测试的代码点对应的每个字符应当视为如此。换而言之,即使也返回一些附加的、未有意地请求的字符,服务器设备仍然将返回按照压缩表示看来已经被请求的每个字符。

服务器设备查明与具有匹配编码结果的多个代码点对应的多个字符。服务器设备访问字体定义以提取用于多个字符的多个字体属性。例如可以提取字形的矢量表示、在字形之间的恰当间距或者字体定义中的字形顺序作为字体属性。服务器设备基于多个字体属性准备与压缩表示对应的字体描述。字体描述包括使终端用户设备能够渲染与多个字符对应的字形的、作为终端用户设备的本地字体的一部分的字形数据。字体描述也可以包括用于在字体扩充场景中向现有本地字体中注入附加字形数据以维持总体字体可用性的至少一个扩充指令。服务器设备向终端用户设备传输准备的字体描述。

以这些方式,可以在终端用户设备处使用压缩机制从字体贮存库获取字体的一部分。可以使用向单个服务器的单个请求在一个阶段中实现获取。形成字体的一部分的希望的字符的枚举可以被精简成适合用于作为url的一部分而包括的压缩表示。url的长度可以充分地短,使得更旧web服务器和代理服务器能够处置作为用于字体部分的请求的url。可以避免做出多个请求或者与多个服务器通信的延迟和复杂性。另外,可以使广泛多样性的字体可用于在不同电子文件中、诸如与不同web页面一起使用。

在以下讨论中,在阐述一些示例术语之后,描述可以采用这里描述的技术的示例环境。然后描述示例实施例系统、机器和技术、继而是说明示例实施例程序和过程的部分。可以在示例环境和系统中以及在其他环境中执行程序和过程。然而,示例程序的执行不限于示例环境,并且示例环境和系统不限于示例程序的执行。

术语示例

以下阐述如这里使用的某些术语的示例描述或者说明。每个术语适用于这里呈现的一个或者多个实施例,但是未必地适用于所有实施例。使用一个或者多个示例来进一步阐明一些术语。

“字体”是指字样或者其具体样式的数字表示(例如文件或者某个代码)。字样的示例包括timesnewroman、helvetica、calibri、baskervilleoldface、britannicbold、neuropol、vladimirscript和couriernew。历史上,每个字样是一个特定点大小,因为字母是由个别物理标志(stamp)制成的。然而,在现代数字环境中,字体可以包括或者可用于产生处于许多不同点大小的字符。字体也可以视为包括基本样式变化或者效果、诸如斜体或者粗体。备选地,不同点大小和不同基本效果可以被封装为分开的字体。多个不同字体可以涉及相同单个语言,或者单个字体可以覆盖多个不同语言、诸如多个不同西欧语言。“字体贮存库”是指具有对多个字体定义的访问并且能够向请求用户、模块、设备等至少分发字体定义的多个部分的位置、实体、模块、服务、设备或者其组合。

“字符”是指文本单位的概念或者抽象化。字符的示例包括字母表的字符、符号、象形文字、标点、表情符、简写或者可以使用计算设备来表示为文本的任何其他人类可读或者可解释形式。字符对应于字形。“字形”是指可由人眼感知和示意对应字符的物理形状或者形式。计算设备在显示屏幕上或者在物理硬拷贝上渲染字形。字形是特定字体如何渲染字形而特有的,但是字符超越多个字体。字符或者字形可以被指派给或者可以对应于代码点。“代码点”是指给定字符的定义或者接受的表示或者用于给定字符的代码或者编码。代码点的示例包括数、字母数字字符、二进制编码数字、一般字符标识、unicode代码点、big5、shiftjis、ascii或者其组合。可以以数字形式将代码点实现为例如非负整数、串等。因为在“字符”、“字形”和“代码点”之间和之中的接近对应性,这里在某种程度上可互换地偶然使用这些术语。例如虽然代码点实际地用于构造压缩表示,但是压缩表示可以称为对应于请求的字符。作为另一示例,虽然使用对应代码点来请求字符,但是返回的字体描述包括与字形对应并且使得能够渲染字形的数据。在某种意义上,可以将字符的抽象概念实现为称为代码点的计算机可识别字符标识符或者称为字形的人类可识别形式,这也可以是字体特有的。

“字体定义”是指可用于生成或者渲染对应字体的字形的指令或者其他信息、诸如用于字形的基于矢量的具体化的指令。字体定义也可以关于在两个字形之间的间距、将两个字形组合成另一字形等而描述一个字形如何与一个或者多个其他字形交互。字体定义可以包括用于被设计到字体的给定版本中的每个字形的这样的信息。换而言之,字体定义可以涉及字体的全部。对照而言,“字体定义的一部分”是指作为原有或者完整字体定义的一部分而包括的字体定义的多个字形,但是少于所有字形。字体定义的一部分类似于字体的真子集或者严格子集。字体的一部分的示例是用于cronospro字体的字体定义的字母g、m和z,该字体覆盖英文字母表的26个字母。可以在字体子集化场景中请求字体的一部分,在该字体子集化场景中,代替完整字体定义仅使用字体的真子集建立新本地字体。字体子集化场景适用于避免必须下载很大字体。备选地,可以在字体扩充场景中请求字体的一部分,在该字体扩充场景中,附加字符将用于扩充现有本地字体。如果意外地或者实时向电子文件添加更多字符,则字体扩充场景将适用。

“压缩表示”是指数据、诸如数据结构,该数据在比与多个个别字符对应的多个个别代码点消耗的总空间、大小或者带宽更少的空间、大小或者带宽中包括、携带或者合并多个个别字符的标识。可以通过向与多个字符对应的多个代码点应用压缩机制来创建用于多个字符的压缩表示。得到的数据结构的示例是概率数据结构,该概率数据结构牺牲用某种程度的精确性或者确定性交换减小的大小。可以创建概率数据结构为bloom过滤器或者通过向将被编码在压缩表示中的多个代码点中的每个代码点应用一个或者多个散列化操作来创建概率数据结构。可以备选地利用其他类型的概率数据结构作为压缩表示。

“字体请求”是指来自字体贮存库的用于字体定义的至少一部分的请求。字体请求包括希望的字符的压缩表示。字体请求也可以包括本地字体的当前状态。终端用户设备可以向服务器设备发送字体请求,该服务器设备耦合到存储多个字体定义的字体数据库。服务器设备返回字体描述。

“字体描述”是指使字体的一部分的多个字形能够由终端用户设备渲染的字形数据。字体描述由字体贮存库从字体定义来产生。字体描述也可以包括如下信息,该信息使得能够在终端用户设备处产生至少包括与多个请求的字符对应的字形的本地字体。另外,字体描述可以包括用于向当前本地字体添加字形数据的至少一个扩充指令。

“本地字体”是指在终端用户设备处存在并且可由终端用户设备用于在显示器或者打印机上渲染字形的字体。本地字体可以包括少于全部的字体定义。“产生本地字体”是指使用从字体贮存库接收的字体描述来创建本地字体。可以通过至少使用字体描述的字形数据建立作为字体定义的字体子集(例如真子集或者严格子集)的新本地字体来创建本地字体。备选地,可以通过至少使用字形数据和字体描述的扩充指令向现有本地字体添加字形数据来扩充本地字体来创建本地字体。

“本地字体的状态”是指如下信息,该信息指示终端用户设备当前具有字体定义的什么部分作为在终端用户设备处的本地字体。例如可以实施本地字体的状态为数据结构,该数据结构指示终端用户设备已经能够渲染字体定义的哪些字形。如果终端用户设备希望扩充现有本地字体,则终端用户设备可以向字体贮存库发送本地字体的状态以向字体贮存库通知已经处理什么字形数据。

“扩充指令”是指如下信息,该信息说明终端用户设备可以如何合并或者添加新字形数据到现有本地字体中以产生新本地字体,该新本地字体使终端用户设备能够使用新本地字体来渲染先前获取的字形以及新获取的字形。

“字体实例化模块”是指能够操控字体有关信息以支持使用用于枚举希望的字符的压缩机制来获取字体的一部分的模块。位于终端用户设备处并且在终端用户设备上执行的字体实例化模块可以执行如这里描述的客户端侧操作。位于服务器设备处并且在服务器设备上执行的字体实例化模块可以执行如这里描述的字体贮存库侧操作。

此外,除非上下文另有指明,这里使用词语“或者”可以视为使用“包含意义的或者”或者允许包括或者应用由词语“或者”链接的一个或者多个项目的术语(例如短语“a或者b”可以被解释为允许仅“a”、仅“b”或者“a”和“b”二者或者与它们相关)。

示例环境

图1图示用于示例实施例的环境100,这些实施例可操作用于采用这里描述的涉及使用压缩机制来获取字体部分的技术。如从上至下描绘的那样,示例环境100包括至少一个服务提供者118、至少一个服务器设备104、至少一个网络106、至少一个终端用户设备102和至少一个终端用户108。终端用户设备102或者服务器设备104可以包括至少一个字体实例化模块110。在环境100的上部或者服务器侧上,图1还描绘至少一个字体数据库116和至少一个字体贮存库120。对于示例操作,环境100还包括至少一个字体请求112和至少一个字体描述114。

在一个或者多个实施例中,至少一个字体实例化模块110支持终端用户设备102使用字体请求112和字体描述114经由服务器设备104从字体数据库116获得字体的至少一部分。因此,字体实例化模块110可以至少部分地实施如这里描述的用于使用压缩机制来获取字体部分的一个或者多个技术或者系统。字体实例化模块110可以位于终端用户设备102、服务器设备104、其某个组合等处或者在终端用户设备102处、服务器设备104、其某个组合等上执行。

如图所示,终端用户108与终端用户设备102关联,并且服务提供者118与服务器设备104关联。终端用户设备102可以经由至少一个网络106与服务器设备104通信或者反之亦然。网络106可以由一个或者多个网络类型的至少一部分形成。网络类型的示例包括公用网络、私用网络、因特网、web、以太网、内部网、外部网、局域网(lan)、广域网(wan)、无线网络、有线网络、蜂窝网络、基础设施网络、自组织网络、蓝牙网络、wi-fi网络、长期演进(lte)网络、公共交换电话网络(pstn)或者其某个组合。

终端用户108、诸如web浏览个体可以使用终端用户设备102来请求适合用于由程序、诸如web浏览器渲染的web页面。终端用户设备102可以被实施为或者可以被配置为任何适当类型的计算设备。终端用户设备102的示例包括桌面型计算机、膝上型计算机、移动设备(例如假设手持配置,该手持配置诸如写字板、移动电话或者平板电话)、耦合到分开的屏幕的移动设备、诸如智能电视的娱乐装置、游戏控制台、配置为接收手势输入的设备、配置为接收话音或者视频输入的设备、配置为提供2d或者3d图像输出的设备、配置为提供声音输出的设备、诸如智能手表或者智能眼镜的可穿戴计算设备、或者其某个组合。因此,终端用户设备102的范围可以从具有大量存储器和处理器资源的相对高资源设备(例如个人计算机或者游戏控制台)到具有有限存储器和/或处理资源的相对低资源设备(例如诸如可穿戴设备的移动设备)。在终端用户设备102处处,字体实例化模块110可以是单独应用,可以被包括作为另一应用的一部分,可以是web浏览应用的一部分,可以包括本机代码,可以包括在任何地方运行的代码,可以是下载的应用或者扩展,可以是库的一部分,可以是其某个组合等。

服务提供者118与服务器设备104或者与字体贮存库120关联以向终端用户设备102提供来自字体数据库116的字体的至少一部分。图1中所示示例场景可以视为“基于云”的计算环境,在该计算环境中,终端用户设备102从形成“云”的一部分的服务器设备104获取字体。一般而言,服务提供者118可以是制造在网络106之上可用的web资源、诸如不同字体用于由终端用户108使用的公司或者其他实体。在一些情形中,希望开发由web标准推动的网站或者内容的另一终端用户(未示出)可以订购服务提供者118的提供对在字体数据库116中存储的不同字体的访问的服务用于包括在其他终端用户打算放在web上的web页面中。然后使web页面可用于经由至少部分地在客户端侧设备、诸如终端用户设备102上执行的单独或者嵌入式web浏览应来访问。

服务提供者118与服务器设备104关联(例如拥有、租赁或者管理服务器设备104)并且引起执行位于服务器设备104处的字体实例化模块110。字体数据库116存储用于多个相应字体的多个字体定义(在图1中未明示)。服务器设备104包括字体数据库116或者以其他方式具有对字体数据库116的访问。如图所示,字体贮存库120包括诸如通过耦合到字体数据库116而至少具有对多个字体定义的访问的服务器设备。备选地,可以实施字体贮存库120为能够向请求者提供字体描述的服务、库、模块、存储单元、其组合等,并且字体贮存库120在请求者本地或者远离请求者。

服务器设备104被配置为经由网络106提供字体的至少一部分。服务器设备104的示例包括web服务器、运行开源软件的服务器、专有设计的服务器、单独服务器、服务器刀片、服务器群的分配的一部分、跨至少一个数据中心分布的服务器功能或者其某个组合。虽然在图1中明示单个服务器设备104,但是服务器设备104可以代表互操作或者协调以执行如已知的“web服务”、“在云之上”或者“在云中”的操作的多个不同设备或者分布式计算资源。

可以实施字体实例化模块110为软件包;硬件设备;或者使用软件、硬件、固件、固定逻辑电路的组合等。可以实施字体实例化模块110为如图1中所示设备102或者104的单独部件。附加地或者备选地,字体实例化模块110可以被配置为另一应用的部件、为字体实例化模块110在其上执行的设备的操作系统(os)(例如终端用户设备102或者服务器设备104的os)的部件、为插件或者扩展模块、为单独服务或者为与其他服务集成的服务、为另一设备应用或者功能、为可用于另一程序的库、为可用于另一程序的应用编程接口(api)或者其组合等。

如对于示例操作场景所示,终端用户设备102的字体实例化模块110制定字体请求112并且使字体请求112经由网络106传输到服务器设备104。作为响应,服务器设备104的字体实例化模块110准备字体描述114并且使字体描述114经由网络106传输到终端用户设备102。以下描述字体请求112和字体描述114的生成、内容和使用。

图2图示拥有具有示例应用202的终端用户设备102的显示场景200,该应用以不同字体210渲染字符作为对应字形212。如图所示,应用202经由显示屏幕、投影仪等呈现用于终端用户108的应用窗口204。应用202包括字形渲染模块206和本地字体208以及字体实例化模块110。示出应用窗口204具有多个不同字体210。每个不同字体210包括关于如何渲染至少一个字形212的信息。如在应用窗口204中渲染的字形212中的若干字体由图2中的椭圆和参考标号显式地指示。

在用户设备108随时间获得不同文本内容时,如在终端用户108遍历web并且下载web页面时,可以设计不同文本内容以使用各种不同字体。全球存在许多语言。示出的示例字体210中的一些字体涉及英文、中文(简体)、阿拉伯文和德文。另外,至少对于更多使用的语言,已经为单个语言设计数百个字体。因此,在终端用户108获得将在应用窗口204中呈现的不同文本内容时随时间按照需要获取字体210。

在本地获得和存储字体210作为至少一个本地字体208之后,本地字体208可以用于根据本地字体208的字体属性或者字形数据渲染字形212。可以实施本地字体208例如为文件、数据库或者其组合。如果应用202希望显示例如词语“cat”,则字形渲染模块206查询本地字体208以确定如何渲染个别字母“c”、“a”和“t”(例如绘制或者激活用于这些字母的像素)。字形渲染模块206还可以从本地字体208知道不同字形212如何相互交互。例如可以背离字母“c”的开放曲线推动字母“a”或者将字母“a”推动到字母“c”的开放曲线中,或者字母“t”的横线可以连接到字母“a”的顶部。

示出字体实例化模块110、字形渲染模块206和本地字体208为应用202的一部分。然而,这些模块中的任何一个或者多个模块可以备选地从应用202分离。例如字体实例化模块110可以是分开的应用,或者本地字体208可以是终端用户设备102的os(未示出)的一部分。

已经考虑示例环境,现在考虑对根据一个或者多个实施例的用于使用压缩机制来获取字体部分的系统或者技术的一些示例细节的讨论。

系统和技术

图3描绘其中终端用户设备102能够响应于字体请求112从服务器设备104-1获取字体的一部分的示例场景300。图3描绘两个服务器设备:服务器设备104-1和服务器设备104-2。实施服务器设备104-1为字体贮存库120,并且实施服务器设备104-2为提供web页面的web服务器。如图所示,场景300还包括字体请求112、字体描述114、字体数据库116和对字体贮存库120的指示。字体数据库116存储用于多个字体的多个字体定义310。

在示例web有关环境中,服务器设备104-2用作能够经由web、诸如web页面302提供信息的web服务器。使用应用、诸如web浏览器,终端用户设备102下载web页面302。web页面302包括将由终端用户设备102根据一个或者多个字体显示为(例如图2的)字形212的多个字符316。web页面302可以包括字体确定模块304。字体确定模块确定哪一个或者多个字体由web页面302使用和在web页面302中包括哪些字符316。可以实施字体确定模块304例如为javascript代码。字体确定模块304可以预加载有字体和字符信息,或者在下载或者将显示、打印或者以其他方式渲染web页面302的情况下或者在下载或者将显示、打印或者以其他方式渲染web页面302时,字体确定模块304可以扫描例如web页面302的文本内容。

终端用户设备102的字体实例化模块110与字体确定模块304通信以确定在web页面302中包括哪些字符316。字体实例化模块110能够确定指定的本地字体208是否已经存在于终端用户设备102。如果是,则字体实例化模块110还能够确定指定的本地字体208是否已经包括将被显示的字符316。如果是,则(图2的)字形渲染模块206可以使用本地字体208来渲染用于web页面302的确定的字符316的对应字形212而不获取字体部分。

在另一方面,如果指定的字体在终端用户设备102处不存在,则字体实例化模块110被配置为请求来自字体贮存库120的指定的字体的子集以建立新本地字体208。以下描述这一字体子集化方面。备选地,如果指定的字体存在于终端用户设备102,但是将被显示的一个或者多个对应字形缺失,则字体实例化模块110被配置为请求来自字体贮存库120的将向现有本地字体208添加的字体扩充。以下参考图6进一步具体地描述这一字体扩充方面。虽然在图3中没有这样示出,但是web页面302可以省略字体确定模块304。在这样的情况下,字体实例化模块110可以独立地或者直接地扫描web页面302或者其他基于文本的内容以确定具有什么字体数据作为本地字体208的一部分可以是有帮助的。

在一个或者多个实施例中,字体实例化模块110生成字体请求112。字体实例化模块110向字体请求112填充压缩表示308并且还可以包括本地字体的状态312。本地字体的状态312反映用于以下参考图6进一步描述的字体扩充场景的本地字体208的当前内容。响应于被确定为对于渲染web页面302而言相关的多个字符316计算压缩表示308。可以例如基于与多个字符316分别对应的多个代码点计算压缩表示308。以下参考图4描述压缩表示308的示例计算。可以实施字体请求112例如为向web服务器提交并且可以遍历web的多个代理服务器的url。在终端用户设备102处的字体实例化模块110使字体请求112传输到服务器设备104-1。

在服务器设备104-1处,字体实例化模块110接收字体请求112。解码压缩表示308以标识多个代码点以便至少查明由字体确定模块304确定为与渲染web页面302相关的多个字符316。字体实例化模块110访问字体数据库116的字体定义310以提取用于与多个字符316对应的多个字形的字体属性。字体实例化模块110使用提取的字体属性来准备字体描述114。字体描述114被填充有字形数据314并且可以包括至少一个扩充指令306。字形数据314是从字体属性得到的并且描述如何个别地或者与用于指定的字体的其他字符316协调地将字符316渲染为字形212。扩充指令306指示如何向现有本地字体208添加字形数据314,以下对于字体扩充场景参考图6进一步描述这一点。如果字体请求112不涉及字体扩充场景,则可以从字体请求112省略本地字体的状态312,并且可以从字体描述114省略扩充指令306。

在服务器设备104-1处的字体实例化模块110封装字形数据314和扩充指令306为字体描述114。字体实例化模块110使服务器设备104-1向终端用户设备102传输字体描述114。在终端用户设备102处的字体实例化模块110接收字体描述114并且使用字体描述114以产生本地字体208。得到的本地字体208是字体定义310的版本并且包括按照确定的字符316将为web页面302而渲染的多个字形212。

图4图示由终端用户设备用于生成字体请求112的示例方式400。如图所示,方式400包括多个字符316、多个代码点406、多个散列化操作410、概率数据结构408和压缩表示308。方式400还描绘多个操作:查明对应性操作402、计算编码操作404和嵌入操作412。

在一个或者多个示例实施例中,实施压缩表示308为概率数据结构408。虽然可以在单个概率数据结构408中编码许多字符316,但是为了清楚,两个不同字符316被图示为在图4中被编码。使用实线描绘左侧字符316以及对应代码点406和多个有关箭头。使用虚线描绘右侧字符316以及对应代码点406和多个有关箭头。

每个字符316对应于代码点406。代码点406可以适用于(例如图3的)单个给定字体定义310,可以涉及多个字体定义310,可以被通用地采用(例如unicode代码点)等。可以实施代码点406例如为字符的多位字母数字集合、诸如四位数字。例如可以使用unicode代码点格式实现代码点406。对于查明对应性操作402,查明代码点406,其中多个代码点406分别对应于将被请求的多个字符316。例如星眼微笑表情符字符可以对应于代码点“47822”。三个逗号分离的代码点406(其中之一对应于微笑表情符)的集合因此可以是:“78,559,47822”。然后将这些三个代码点中的每个代码点编码为概率数据结构408。

概率数据结构408包括可以设置(例如被赋值“1”)或者清空(例如赋值“0”)的多个字段。可以使用许多可用算法或者策略中的任何一个或者多个算法或者策略来创建概率数据结构408。示例包括bloom过滤器、超对数(hyperlog)、动力悬挂器(kinetichanger)、本地敏感散列化、微散列(minihash)、商过滤器(quotientfilter)、随机树、跳跃列表或者其某个组合。例如但不限于,对于图4和5的两个方式向多个代码点406应用bloom过滤器技术。

对于计算编码操作404,初始地清空概率数据结构408的每个字段。终端用户设备102的字体实例化模块110向多个散列化操作410应用每个代码点406,并且概率数据结构408被相应地编程。如图所示,采用三个散列化操作410-1、410-2和410-3。然而,可以备选地采用或多或少的散列化操作410。

在示例bloom过滤器实现方式中,每个代码点406被散列化三次,每个散列化操作410-1、410-2和410-3一次。每个散列化操作410将代码点406散列化到概率数据结构408的字段。字体实例化模块110设置散列化操作410将给定代码点406映射到的每个字段。对于具有实线的左侧代码点406,设置第三、第五和第八字段。对于具有虚线的右侧代码点406,设置第二、第五和第八字段。使用bloom过滤器,两个或者更多个不同代码点406可以根据散列化操作410的数目或者类型和概率数据结构408的长度或者大小而映射到同一组字段。这样的重复映射的可能性如果未被完全地消除则可以通过调整散列化操作410的数目、概率数据结构408的大小、采用的散列化操作410的类型、其某个组合等来管理。

在与多个字符316对应的多个代码点406已经各自被散列化和用于对概率数据结构408进行编程之后,已经计算压缩表示308。(例如图3的)字体实例化模块110通过向字体请求112中插入压缩表示308来执行嵌入操作412。虽然未明示,但是字体实例化模块110还可以通过在字体请求112中包括适当渲染字体的指示、诸如字体定义310的标识来指定字体。如果实施字体请求112为url,则字体请求112还可以包括目标服务器设备在web上的因特网地址。

图5图示由服务器设备用于生成字体描述114以对(例如图3或者4的)字体请求112做出响应的示例方式500。如图所示,方式500包括多个操作:解码操作502、查明操作504、访问操作506和准备操作508。概率数据结构408可以用于实施压缩表示308。为了解码概率数据结构408,测试指示的字体的每个编码的字符316以确定字符316是否被请求。关于给定字体定义,每个字符316对应于代码点406。因此,作为解码操作502的一部分,解码用于给定字体定义的代码点集合516的每个代码点406。

虽然代码点406可以数目为数以百计或者数以千计或者更多,但是为了清楚而示出两个代码点406。使用实线示出左侧代码点406以及多个有关箭头。使用虚线示出右侧代码点406以及多个有关箭头。解码操作502的一部分可以包括编码操作512。使用用于示例bloom过滤器实现方式的编码操作512,(例如图3的服务器设备104-1的)字体实例化模块110向代码点集合516的代码点406中的每个代码点应用多个散列化操作410以计算多个编码结果514(例如计算多个散列化结果)。可以响应于(例如图3的)接收的字体请求计算多个编码结果514。备选地,可以对于用于每个字体定义310的每个代码点集合516预先计算多个编码结果514并且保持这些编码结果用于后续与接收的压缩表示308比较。

作为解码操作502的一部分,字体实例化模块110比较多个编码结果514与概率数据结构408的字段以标识与压缩表示308匹配的那些代码点406。对于具有实线的左侧代码点406,每个散列化操作410映射到设置的字段,如由概率数据结构408之下的实心复选标记指示的。因此与左代码点406对应的字符视为已经被终端用户设备102请求,如由概率数据结构408以下描绘的左侧代码点406之下的大号样式化的复选标记指示的。对照而言,对于具有虚线的右侧代码点406,散列化操作中的两个散列化操作410-1和410-2映射到设置的字段,如由虚线复选标记指示的。然而,散列化操作410-3映射到未设置的字段,如由虚线“x”标记指示的。因此,与右侧代码点406对应的字符不被视为已经被终端用户设备102请求,如由概率数据结构408以下描绘的右侧代码点406之下的大号样式化的“x”标记指示的。

对于查明操作504,查明与匹配代码点406对应的每个字符316。例如可以查明代码点“2374”对应于具有元音变音的字母“u”(例如“ü”)。查明的字符316对应于字形212。字体实例化模块110参考查明的字符316访问字体定义310以提取至少一个字体属性510。字体属性510可以包括用于对应字形212的指令或者对将如何渲染对应字形212的说明。例如可以实施字体属性510为字形212的基于矢量的表示。

作为解码操作502的一部分,对于每个代码点406和被确定为与压缩表示408一致的对应字符316重复查明操作504和访问操作506。作为准备操作508的一部分,字体实例化模块110封装多个字体属性510以在字体描述114中包括渲染信息作为字形数据314。字形数据314可以涉及个别字形212和一组字形212。

以上参考图4和5描述的方式400和500适用于其中在终端用户设备102处新实例化字体子集作为新本地字体208的情形。然而,这些方式可以被扩展以应用于其中通过向现有本地字体208添加用于多个对应字符316的多个字形212来扩充现有本地字体208的情形。以下参考图6描述用于这一字体扩充的示例实现方式。

图6描绘示例场景600,在该场景中,终端用户设备102能够在字体扩充情形中从服务器设备104获取字体的一部分。在web浏览期间,可能出现如下情形,在该情形中,与指示的字体对应的现有本地字体208却无法包括用于应用希望渲染的与字符316对应的字形212的数据。例如在输入用于表格的个人信息之时,终端用户可以在web页面上键入在本地字体208中不存在的新字符。下载也包括用于新字符的字形数据的全新字体部分可能是耗费时间的或者带宽密集的。在另一方面,仅向本地字体208的末端上附加新字形212可能造成大的并且不实用或者甚至有缺陷的本地字体208,尤其是如果向本地字体208反复地添加更多字形212。

然而,如果向现有本地字体208仔细地添加新字形212,则可以以可使用和连续地可扩展形式维持本地字体208。例如本地字体208可以被配置为在添加用于新的每组字形212的字形渲染数据时模仿字体定义310的微型版本。可以使用扩充指令306来实现本地字体208的这一重新配置。

在一个或者多个实施例中,在终端用户设备102处的字体实例化模块110分析现有本地字体208以确定本地字体208的当前内容。将这一当前内容、诸如哪些字形212已经存在实现为本地字体的状态312。例如字体实例化模块110可以创建数据结构,该数据结构指示已经存在于现有本地字体208中的每个字形212。可以设置(或者清空)位以例如指示关联字形212存在(或者不存在)。然而,可以实施备选数据结构或者技术以在本地字体的状态312中编码字形212在现有本地字体208中的存在或者不存在。

字体实例化模块110在字体请求112中包括本地字体的状态312以及压缩表示308。字体实例化模块110还使终端用户设备102向服务器设备104传输字体请求112。虽然压缩表示308和本地字体的状态312可以被组合成一个分组或者其他通信单元、例如单个url,但是压缩表示308和本地字体的状态312各自可以备选地被分离地或者在两个或者更多个通信单位之上传达到服务器设备104。服务器设备104接收具有本地字体的状态312的字体请求112并且向在服务器设备104处的字体实例化模块110提供字体请求112。

在服务器设备104处,字体实例化模块110与字体定义310结合使用压缩表示308和本地字体的状态312以准备扩充指令306。根据本地字体的状态312,字体实例化模块110确定哪些字形212已经存在于本地字体208。根据压缩表示308,字体实例化模块110确定哪些新字符316被请求。准备扩充指令306以便指示如何向现有本地字体208添加用于与请求的字符316对应的多个新字形212的数据,假设某些字形212已经作为本地字体208的一部分而存在。

例如扩充指令306可以通过重新排序本地字体208中的字形212的组合集合来指示新字形212将如何与现有字形212集成。组合和重新排序的字形212也可以被指派用于本地字体208的新本地排序编号。扩充指令306可以被配置使得更新的本地字体208在可实行的程度上近似于字体定义310,假设本地字体208仅为完整字体的全部的一部分。以这一方式,如果向本地字体208连续地添加新字形212直至已经添加字体定义310的可能字形212中的每个字形,则本地字体208将最终地被扩充指令306重新排列以便如同最初请求字体定义310的全部一样被配置为用于指定的字体的字形212的完整集合。

服务器设备104的字体实例化模块110生成字体描述114以包括字形数据314和扩充指令306。字体实例化模块110使服务器设备104向终端用户设备102传输字体描述114。在终端用户设备102处的字体实例化模块110与新接收的字形数据314一起使用扩充指令306以通过向本地字体208添加与多个请求的字符316对应的多个字形212来扩充现有本地字体208。例如字体实例化模块110可以基于扩充指令306向本地字体208中注入多个字形212以产生用于本地字体208的更新的字形顺序并且可以根据更新的字形顺序对本地字体208的字形212重新编号。

已经讨论用于使用压缩机制来获取字体部分的系统、技术和方案的示例细节,现在考虑一些示例程序以说明技术的附加方面。

示例程序

这一部分参考图7和8描述在一个或者多个实施例中的涉及使用压缩机制来获取字体部分的示例程序。可以在硬件、固件或者软件或者其组合中实施程序的方面。示出程序为指定可以由一个或者多个设备执行的操作的块集合,但是操作的执行未必地限于如由相应块所示或者如这里描述的顺序,可以按其他顺序或者以完全地或者部分地重叠方式执行操作。在至少一些实施例中,程序可以由利用字体实例化模块110的适当地配置的设备、诸如用于图7的示例终端用户设备102或者用于图8的示例服务器设备104来执行。

图7是流程图,该流程图包括六个块702-712并且图示根据一个或者多个示例实施例的用于终端用户设备102的示例程序700,该终端用户设备执行用于使用压缩机制来获取字体部分的实现方式。在操作702,确定形成字体定义的一部分的多个字符。例如终端用户设备102可以确定形成字体定义310的一部分的多个字符316。为了这样做,字体实例化模块110可以与字体确定模块304通信以确定什么字符316将被显示并且可以访问本地字体208以确定将被显示的什么字形212尚未被包括在本地字体208中。字体实例化模块110扫描文件(例如文档或者web页面)以检测字符316。由此确定在本地字体208中没有对应字形212的检测到的字符316。可以在多个可能表示、诸如字形形式、标识数字、代码点、其组合等中的任何表示中检测字符316。

在操作704,查明与多个字符分别对应的多个代码点。例如终端用户设备102可以查明与多个字符316分别对应的多个代码点406。字体实例化模块110可以例如查明什么通用代码点、诸如unicode代码点值对应于将被请求的字符316。如果作为操作702的一部分字符316被检测为可以用于做出请求的代码点(例如unicode代码点值),则可以与操作702的确定联合地或者同时地执行操作704的查明,或者操作704的查明可以确认已经查明适当代码点。

在操作706,基于多个代码点计算至少多个字符的压缩表示。例如终端用户设备102可以基于多个代码点406计算至少多个字符316的压缩表示308。为了实现计算,字体实例化模块110可以向多个代码点406应用bloom过滤器技术以创建概率数据结构408。

在操作708,向字体贮存库传达包括压缩表示的字体请求。例如终端用户设备102可以向字体贮存库120传达包括压缩表示308的字体请求112。为了这样做,字体实例化模块110可以使终端用户设备102向经由网络106具有对字体数据库116的访问的服务器设备104传输包括概率数据结构408的字体请求112。字体请求112可以被实施为指向服务器设备104的url并且包括概率数据结构408的字段作为其部分。

在操作710,从字体贮存库接收与压缩表示对应的字体描述。例如终端用户设备102可以从字体贮存库120接收与压缩表示308对应的字体描述114。字体描述114可以包括至少用于与字符316对应的每个字形212的字形数据314,该字符被编码到概率数据结构408中以创建压缩表示308。

在操作712,使用字体描述来产生包括与多个字符对应的多个字形的本地字体,并且本地字体由此实现字体定义的版本。例如终端用户设备102可以使用字体描述114来产生包括与多个字符316对应的多个字形212的本地字体208,并且得到的本地字体208由此形成字体定义310的版本。例如可以创建本地字体208,使得可以就像字体定义310的全部用于创建本地字体208一样渲染在本地字体208中包括的与多个请求的字符316对应的多个字形212。

图8是流程图,该流程图包括六个块802-812并且图示根据一个或者多个示例实施例的用于服务器设备104的示例程序800,该服务器设备执行用于使用压缩机制来获取字体部分的实现方式。在操作802,从终端用户设备接收与形成字体定义的一部分的多个字符对应的压缩表示。例如服务器设备104可以从终端用户设备102接收与形成字体定义310的一部分的多个字符316对应的压缩表示308。为了实现接收,服务器设备104可以处理url并且提取其部分,该部分形成多个代码点406已经在其中被编码的概率数据结构408。url还可以指示特定字体210。

在操作804,解码压缩表示以标识多个代码点。例如服务器设备104可以解码压缩表示308以标识多个代码点406。为了这样做,字体实例化模块110可以使用用于字形212的代码点406和用于指示的字体210的字体定义310的代码点集合516的对应字符316来产生编码结果514。字体实例化模块110还可以比较编码结果514与概率数据结构408以确定哪些代码点406匹配压缩表示308以便标识匹配代码点406。

在操作806,基于多个代码点查明多个字符,并且多个字符分别对应于多个代码点。例如服务器设备104可以基于多个代码点406查明多个字符316,并且多个字符316分别对应于多个代码点406。例如使用用于指示的字体210的字体定义310或者用于unicode代码点以及标识的匹配代码点406的一般对应性表,字体实例化模块110可以至少查明被终端用户设备102请求的多个字符316。字体实例化模块110可以附加地查明由于与压缩表示308的潜在误报而没有被终端用户设备102有意地请求的一个或者多个字符316。

在操作808,访问字体定义以提取用于与多个字符对应的多个字形的字体属性。例如服务器设备104可以访问字体定义310以提取用于与多个标识的字符316对应的多个字形212的字体属性510。为了实现提取,字体实例化模块110可以从指示的字体210的字体定义310隔离如下那些指令,这些指令描述如何渲染至少用于被终端用户设备102请求的多个字符316的字形212。

在操作810,基于字体属性准备与压缩表示对应的字体描述,并且字体描述使终端用户设备能够渲染作为终端用户设备的本地字体的一部分的多个字形。例如服务器设备104可以基于字体属性510准备与压缩表示308对应的字体描述114,并且字体描述114使终端用户设备102能够渲染作为终端用户设备102的本地字体208的一部分的多个字形212。为了这样做,字体实例化模块110可以准备字体描述114以便包括字形数据414,该字形数据用作用于至少显示与被终端用户设备102请求的多个字符316对应的多个字形212的指令(例如矢量表示)。对于字体扩充场景,可以附加地准备字体描述114以便包括至少一个扩充指令306以描述终端用户设备102如何可以将字形数据314合并到现有本地字体208中。

在操作812,向终端用户设备传输字体描述。例如服务器设备104可以向终端用户设备102传输字体描述。充当字体贮存库120的服务器设备104可以将字体描述114下载到在终端用户设备102处字形的字体实例化模块110的实例。

已经描述根据一个或者多个实施例的示例程序,现在考虑可以用于实施这里描述的各种方案和技术的一种示例系统和设备。

示例系统和设备

图9总地在900图示示例系统,该系统包括代表可以实施这里描述的各种技术的一个或者多个计算系统和/或计算设备的示例计算设备902。通过包括两个字体实例化模块110以及字体数据库116来图示这一点,两个字体实例化模块110中的任一个或者二者可以如以上描述的那样操作。计算设备902可以例如包括终端用户108的终端用户设备(例如客户端设备)、服务提供者118的服务器设备、片上系统(soc)或者任何其他适当计算设备或者计算系统。示例终端用户设备102由计算设备902-1代表,并且示例服务器设备104由计算设备902-2代表。

如图所示示例计算设备902包括可以相互通信地耦合的至少一个处理系统904、一个或者多个计算机可读介质906和一个或者多个i/o接口908。虽然未示出,但是每个计算设备902还可以包括相互耦合各种部件的系统总线或者其他数据和命令传送系统。系统总线可以包括不同总线结构中的任何总线结构或者组合,总线结构诸如存储器总线或者存储器控制器、外围总线、通用串行总线或者利用各种总线架构中的任何总线架构的处理器或者本地总线。还设想各种其他示例、诸如控制和数据线。

处理系统904代表用于使用硬件来执行一个或者多个操作的功能。因此,图示处理系统904为包括可以被配置为处理器、功能块等的硬件元件910。这可以包括在硬件中实施为专用集成电路(asic)或者使用例如一个或者多个半导体而形成的其他逻辑器件。硬件元件910不受形成它们的材料或者其中采用的处理机制所限制。例如处理器可以由(多个)半导体或晶体管(例如电子集成电路(ic))组成。在这样的上下文中,处理器可执行指令可以包括电子地可执行指令。

图示计算机可读存储介质906为包括存储器/存储装置912。存储器/存储装置912代表与一个或者多个计算机可读介质关联的存储器/存储装置容量。存储器/存储装置部件912可以包括易失性介质(诸如随机存取存储器(ram))或非易失性介质(诸如只读存储器(rom)、闪存、光盘、磁盘等)。存储器/存储装置部件912可以包括固定介质(例如ram、rom或者由电磁盘或者闪存形成的固定硬驱动)或者可移除介质(例如闪存、可移除硬驱动或者光盘)。可以以如以下进一步描述的各种其他方式配置计算机可读介质906。

(多个)输入/输出接口908代表用于允许用户向计算设备902键入命令或者信息或者允许向用户呈现信息的功能,或者使用各种输入/输出设备的其他部件或者设备。输入设备的示例包括键盘、光标控制设备(例如鼠标或者触板)、麦克风、扫描仪、触摸功能(例如被配置为检测物理触摸的电容性、电阻性或者其他传感器)、相机(例如该相机可以采用可见光或者不可见光波长、诸如红外线频率以识别移动,如未涉及到触摸的手势)或者其组合。输出设备的示例包括显示设备(例如lcd或者led屏幕、监视器或者投影仪)、扬声器、打印机、网卡、触觉振动设备或者其组合。因此,可以用如以下进一步描述的各种方式配置计算设备902以支持本地或者远程用户交互。

这里可以在软件、硬件元件或者程序模块的一般上下文中描述各种技术。一般而言,这样的模块可以包括执行特定任务或者实施特定抽象数据类型的例程、程序、对象、元件、部件、数据结构、其组合等。如这里所用术语“模块”、“功能”和“部件”一般地代表软件、固件、硬件或者其组合。这里描述的技术的特征可以独立于平台,这意味着可以在具有各种处理器的各种商用计算平台上实施描述的技术。

可以在某个形式的计算机可读介质上存储或者跨该计算机可读介质传输描述的模块及其技术的一个实施例。计算机可读介质可以包括计算设备902可以访问的各种介质。举例而言并且没有限制,计算机可读介质包括“计算机可读存储介质”和“计算机可读信号介质”。

“计算机可读存储介质”如这里所用是指与仅信号传输、载波或者信号本身对照实现持久和/或非瞬态信息存储的介质或者设备。计算机可读存储介质不包括信号本身或者信号承载介质。计算机可读存储介质包括硬件,硬件诸如以适合用于存储信息的方法或者技术实施的易失性和非易失性、可移除和非可移除介质或存储设备,信息诸如计算机可读指令、数据结构、程序模块、逻辑元件/电路或者其他数据。计算机可读存储介质的示例包括ram、rom、eeprom、闪存或者例如固态存储器技术的其他存储器技术;cd-rom、数字万用盘(dvd)或者其他光存储装置;硬盘、磁盒、磁带、磁盘存储装置或者其他磁存储设备;或者适合用于存储希望的信息并且可以由计算机访问的其他存储设备、有形介质、制造品或者其组合。

“计算机可读信号介质”如这里所用是指被配置为诸如经由网络向计算设备902的硬件传输指令的信号承载介质。计算机可读信号介质通常地可以在调制的数据信号、诸如载波、数据信号或者其他传送机制中体现计算机可读指令、数据结构、程序模块或者其他数据。计算机可读信号介质也可以包括任何信息递送介质。术语“调制的数据信号”意味着如下信号,该信号使它的特性中的一个或者多个特性以对信号中的信息进行编码这样的方式来设置或者改变。举例而言,计算机可读信号介质可以包括有线介质和无线介质,有线介质诸如有线网络或者直接有线连接,无线介质诸如声学、rf、微波、红外线或者其他无线介质。

如先前描述的那样,硬件元件910和计算机可读介质906可以代表以如下硬件形式实施的模块、可编程逻辑器件、固定器件逻辑、其组合等,可以在一些实施例中采用该硬件形式以实施这里描述的技术的至少一些方面、诸如执行一个或者多个指令或者计算动作。硬件可以包括集成电路(ic)或者片上系统的部件、专用集成电路(asic)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld)或者在硅或者其他硬件中的其他实现方式。在该上下文中,硬件可以作为处理设备操作,该处理设备执行由指令定义的程序任务或者由硬件体现的逻辑以及用于存储用于执行的指令的硬件、例如先前描述的计算机可读存储介质。

还可以采用前述各项的组合以实施这里描述的各种技术。因此,可以实施软件、硬件或者可执行模块为在某个形式的计算机可读存储介质上或者由硬件元件910中的一个或者多个硬件元件体现的一个或者多个指令或者逻辑。计算设备902可以被配置为实施与软件或者硬件模块对应的特定指令或者功能。因此,可以至少部分地在硬件中、例如通过使用计算机可读存储介质或者处理系统904的硬件元件910来实现作为软件可由计算设备902执行的模块的实现方式。指令或者功能可以由一个或者多个制造品(例如计算设备902或者处理系统904中的一个或者多个算设备或者处理系统)可执行/可操作以实施这里描述的技术、模块或示例。

这里描述的技术可以由计算设备902的各种配置所支持,并且不限于这里描述的示例设备的具体方面。还可以全部地或者部分地通过使用分布式系统、诸如如以下描述的那样经由平台916在“云”914之上实施这一功能。

云914可以包括或代表用于资源918的平台916。平台916抽象化云914的硬件(例如服务器或者数据中心)和软件资源的底层功能。资源918可以包括可以在至少部分地在从计算设备902远离或者在计算设备902周围分布的服务器上执行计算机处理时利用的应用或者数据。资源918还可以包括通过因特网或者通过用户网络、诸如蜂窝或者wi-fi网络提供的服务。

平台916可以抽象化用于连接计算设备902与其他计算设备的资源和功能。平台916还可以用于抽象化资源的规模以提供与对于经由平台916实施的资源918的所遇需求对应的规模级别。因此,在一个互连设备实施例中,可以遍布系统900或者至少与诸如计算设备902-2的计算设备902一起遍布云914分布这里描述的功能的实现方式。例如可以部分在计算设备902上以及经由抽象化云914的功能的平台916实施功能。

结论

虽然已经用结构特征和/或方法动作特有的言语描述本发明,但是将理解在所附权利要求中限定的本发明未必地限于描述的具体特征或者动作。更确切地说,公开具体特征和动作作为实施要求保护的发明的示例形式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1