字体处理方法和装置
技术领域
本发明实施例涉及字库技术领域,尤其涉及一种字体处理方法和装置。
背景技术
随着计算机办公软件的不断发展,各种各样的字库层出不穷。为了在屏幕上获得正确的渲染填充效果,字库中的字体必须能够正确的标记字体的内外轮廓。如对于OTF字库,外轮廓是逆时针方向,内轮廓是顺时针方向。
通常字库制作过程为:首先制作好带交叉的回路轮廓,然后对带交叉的回路轮廓进行去交叉操作,最后制作成完整的字库。若字体的内外轮廓方向出现错误,则直接导致轮廓去交叉出现错误,制作好的字库中该字体在渲染和加粗显示时都会出现问题。因此,能够识别出字体中的有问题的内外轮廓方向,并对有问题的内外轮廓方向进行及时修改对于制作字库具有重要的意义。
目前为了设计出想要的字形效果,字体的内外轮廓方向需要设计师自己指定,在指定过程中,可能会出现很多错误,需要设计师依据指定规则进行检查,导致识别出字体中的有问题的内外轮廓方向的效率较低,并且也使准确率较低。
发明内容
本发明实施例提供一种字体处理方法,该方法解决了现有技术中需要设计师依据指定规则进行检查,导致识别出字体中的有问题的内外轮廓方向的效率较低,并且也使准确率较低的技术问题。
本发明实施例提供一种字体处理方法,包括:
对待处理字体的回路轮廓进行加粗处理,形成第一字体;
对待处理字体和第一字体进行填充处理,分别形成第一填充字体和第二填充字体;
输出第一填充字体和第二填充字体,以将第一填充字体和第二填充字体进行对比,识别出错误内外轮廓方向。
本发明实施例提供一种字体处理装置,包括:
加粗处理模块,用于对待处理字体的回路轮廓进行加粗处理,形成第一字体;
填充处理模块,用于对待处理字体和第一字体进行填充处理,分别形成第一填充字体和第二填充字体;
显示模块,用于显示第一填充字体和第二填充字体,以将第一填充字体和第二填充字体进行对比,识别出错误内外轮廓方向。
本发明实施例提供一种字体处理方法和装置,通过对待处理字体的回路轮廓进行加粗处理,形成第一字体;对待处理字体和第一字体进行填充处理,分别形成第一填充字体和第二填充字体;显示第一填充字体和第二填充字体,以将第一填充字体和第二填充字体进行对比,识别出错误内外轮廓方向。由于字体在加粗处理后,相应的轮廓会变粗,若在人眼更易分辨的填充字体中,第二填充字体的部分轮廓没有变粗反而变细,则说明该部分回路轮廓的内外轮廓方向出现了错误,使对错误内外轮廓方向的识别效率更高,并且提高了识别准确率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明字体处理方法实施例一的流程图;
图2为本发明实施例一中执行对待处理字体进行填充处理,形成第一填充字体后的示意图;
图3为本发明实施例一中执行对第一字体进行填充处理,形成第二填充字体后的示意图;
图4为本发明字体处理方法实施例二的流程图;
图5为本发明实施例二中执行对第二字体进行填充处理,形成第三填充字体后的示意图;
图6为本发明字体处理装置实施例一的结构示意图;
图7为本发明字体处理装置实施例二的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
图1为本发明字体处理方法实施例一的流程图,如图1所示,则本实施例提供的字体处理方法的执行主体为字体处理装置,该字体处理装置可集成或安装在计算机、笔记本电脑或服务器中,则本实施例提供的字体处理方法包括以下几个步骤。
步骤101,对待处理字体的回路轮廓进行加粗处理,形成第一字体。
本实施例中,首先对待处理字体的回路轮廓进行加粗处理,加粗处理后的字体为第一字体。
其中,本实施例中以回路轮廓中外轮廓为逆时针方向,内轮廓为顺时针方向为字体回路轮廓的正确方向。
对待处理字体的回路轮廓进行加粗处理具体可分为:首先对待处理字体的回路轮廓进行离散化处理,使回路轮廓形成一个个的离散点,然后将回路轮廓离散点向外进行平移处理,在本实施例中,由于外轮廓为逆时针方向,内轮廓为顺时针方向,所以将回路轮廓离散点向外进行平移处理时,是将回路轮廓上的点向左进行平移。平移的尺寸用线数表示。其次,将平移处理后的回路轮廓离散点拟合为直线段和曲线段,即由于字体由直线段和曲线段构成,所以在进行平移后能拟合成直线段的拟合为直线段,不能拟合为直线段的拟合为曲线段。最后,将拟合后的直线段和曲线段首尾顺次连接,形成第一字体。
步骤102,对待处理字体和第一字体进行填充处理,分别形成第一填充字体和第二填充字体。
具体地,本实施例中,对待处理字体进行填充处理,形成第一填充字体。将第一字体进行填充处理,形成第二填充字体。进行填充处理时,可将字体的回路轮廓内填充为同一颜色。具体地,图2为本发明实施例一中执行对待处理字体进行填充处理,形成第一填充字体后的示意图,图3为本发明实施例一中执行对第一字体进行填充处理,形成第二填充字体后的示意图。如图2和图3所示,将待处理字体的回路轮廓以及将第一字体的回路轮廓中均填充为黑色,形成第一填充字体和第二填充字体。
步骤103,输出第一填充字体和第二填充字体,以将第一填充字体和第二填充字体进行对比,识别出错误内外轮廓方向。
具体地,本实施例中,将第一填充字体和第二填充字体进行输出显示,以使用户将第一填充字体和第二填充字体进行对比,识别出错误的内外轮廓方向。
其中,用户可以为字库的设计师,用户根据字体加粗填充后的显示效果,可以高效判断字体的回路轮廓中的内外轮廓方向是否正确。由于字体在加粗处理后,相应的轮廓会变粗。若在第二填充字体中,有部分回路轮廓没有变粗反而变细,则说明该部分回路轮廓的内外轮廓方向出现了错误。由于人眼对填充的图案更灵敏,所以根据填充字体来判断回路轮廓的内外轮廓方向是否出现了错误更加高效。如在图2和图3中,很明显地看出图3中的白色椭圆形圆圈内的回路轮廓的内外轮廓方向出现了错误。
本实施例提供的字体处理方法,通过对待处理字体的回路轮廓进行加粗处理,形成第一字体;对待处理字体和第一字体进行填充处理,分别形成第一填充字体和第二填充字体;显示第一填充字体和第二填充字体,以将第一填充字体和第二填充字体进行对比,识别出错误内外轮廓方向。由于字体在加粗处理后,相应的轮廓会变粗,若在人眼更易分辨的填充字体中,第二填充字体的部分轮廓没有变粗反而变细,则说明该部分回路轮廓的内外轮廓方向出现了错误,使对错误内外轮廓方向的识别效率更高,并且提高了识别准确率。
图4为本发明字体处理方法实施例二的流程图,如图4所示,本实施例提供的字体处理方法,是在本发明字体处理方法实施例一的基础上,对步骤101的进一步细化,并增加了对待处理字体的回路轮廓进行减细处理,形成第二字体,对第二字体进行填充处理,形成第三填充字体,输出第三字体的步骤。则本实施例提供的字体处理方法包括以下步骤。
步骤401,对待处理字体的回路轮廓进行加粗处理,形成第一字体。
进一步地,本实施例中,对待处理字体的回路轮廓进行加粗处理,形成第一字体,具体包括以下步骤。
步骤401a,对待处理字体的回路轮廓进行离散化处理。
本实施例中,待处理字体的回路轮廓由直线段和贝塞尔曲线段构成。
其中,本实施例中,对待处理字体的回路轮廓进行离散化处理具体为:
首先判断回路轮廓线段是否为直线段,若不为直线段,则说明该线段为贝塞尔曲线,利用贝塞尔公式将贝塞尔曲线进行离散化。直线段的离散为现有技术,本实施例中不再详细赘述。
步骤401b,将回路轮廓离散点向外进行平移处理。
具体地,本实施例中,由于正确的轮廓方向为:外轮廓为逆时针方向,内轮廓为顺时针方向,所以将回路轮廓离散点向外进行平移处理时,将回路轮廓上的点向左进行平移。
其中,将回路轮廓中的贝塞尔曲线段上的离散点向外进行平移处理具体表示为式(1)所示:
其中,点p0(px0,py0)是回路轮廓贝塞尔曲线段上的离散点,R是字体加粗的线数,点p(px,py)是点p0(px0,py0)平移后的离散点。α是回路轮廓曲线段在离散点p0(px0,py0)处的切线的垂线段与水平方向的夹角。
其中,判断平移后的点p(px,py)是否向左进行平移的方法可为判断式(2)是否成立的方式。
其中,式(2)表示矩阵的行列式,若式(2)成立,则点p(p
x,p
y)在回路轮廓的左侧,若式(2)不成立,则点p(p
x,p
y)在回路轮廓的右侧。点
是点p(p
x,p
y)的相邻点。
步骤401c,将平移处理后的回路轮廓离散点拟合为直线段和曲线段。
进一步地,将平移处理后的回路轮廓离散点拟合为直线段和曲线段,具体以下步骤:
步骤401c1,将平移处理后的回路轮廓离散点按待处理字体的回路轮廓的线段分成多个集合。
步骤401c2,将每个集合中的平移处理后的回路轮廓离散点拟合为直线段。
步骤401c3,判断每个集合中的回路轮廓离散点与拟合的直线段上的对应点的误差是否均小于预设阈值;
步骤401c4,若误差并非均小于预设阈值,则将集合中的平移处理后的回路轮廓离散点采用逐次调整拟合参数的最小二乘法拟合为三次贝塞尔曲线段。
结合步骤401c1-步骤401c4对步骤401c进行说明。本实施例中由于字体的每部分待处理字体的回路轮廓的线段的线条比较平滑,所以首先将平移处理后的回路轮廓离散点按待处理字体的回路轮廓的线段分成多个集合,尝试将每个集合中的平移处理后的回路轮廓离散点拟合为直线段,检测回路轮廓离散点与拟合的直线段上的对应点的误差是否均小于预设阈值,若是,则说明该部分回路轮廓离散点适合拟合成直线段,若不是,则说明该部分回路轮廓更适合拟合为曲线段,则将集合中的平移处理后的回路轮廓离散点采用逐次调整拟合参数的最小二乘法拟合为三次贝塞尔曲线段。
其中,直线段的拟合为现有技术,本实施例中不再详细赘述。
进一步地,本实施例中,步骤401c4中将集合中的平移处理后的回路轮廓离散点采用逐次调整拟合参数的最小二乘法拟合为三次贝塞尔曲线段的说明如下:
首先,设三次贝塞尔曲线的方程表示为式(3)所示:
其中,p0(x0,y0),p3(x3,y3)分别是三次贝塞尔曲线的起点和终点,p1(x1,y1),p2(x2,y2)分别是三次贝塞尔曲线的两个控制点。设贝塞尔曲线平移后的离散点的坐标为(Xi,Yi)(i=0,...n),其中p0的坐标为离散点的起点坐标(X0,Y0),p3为离散点的终点坐标(Xn,Yn),在拟合的过程中只需确定控制点p1(x1,y1),p2(x2,y2)的坐标。对离散点进行最小二乘法拟合,使得拟合曲线上的点与离散点之间距离的平方差之和达到最小,即使式(4)达到最小:
在式(4)取得最小值时,令式(5)和式(6)同时成立:
通过解方程组可以求出两个控制点p1(x1,y1),p2(x2,y2)的坐标。
其中,在求控制点的坐标时拟合参数ti是需要确定的,本实施例中,确定拟合参数ti采用累加弦长法。其实现方法为:设li是离散点(Xi,Yi)和(Xi-1,Yi-1)之间的距离,其中l0=0,则离散点(Xi,Yi)对应的拟合参数可表示为式(7)所示:
其中,n表示具有离散点的个数,ti的取值为[0,1]。
优选地,利用逐次调整拟合参数对离散点进行最小二乘法拟合的方法如下:
首先,利用累加弦长法确定拟合参数told_i,对离散点使用最小二乘法进行拟合,得到拟合的三次贝塞尔曲线Cold。
然后,对任意离散点(Xi,Yi),在拟合曲线Cold找到距离离散点(Xi,Yi)最近的点所对应的参拟合数ti,作为离散点(Xi,Yi)新的拟合参数tnew_i。
最后,根据新确定的拟合参数tnew_i,对离散点重新进行最小二乘法拟合,得到新的拟合曲线Cnew。
重复上述过程,通过逐次调整拟合参数,可以对该集合中的平移后的回路轮廓离散点获得比较好的拟合效果。
步骤401d,将拟合后的直线段和曲线段首尾顺次连接,形成第一字体。
步骤402,对待处理字体的回路轮廓进行减细处理,形成第二字体。
具体地,本实施例中,对待处理字体的回路轮廓进行减细处理,形成第二字体具体包括以下步骤。
步骤402a,对待处理字体的回路轮廓进行离散化处理。
步骤402b,将回路轮廓离散点向内进行平移处理;
步骤402c,将平移处理后的回路轮廓离散点拟合为直线段和曲线段;
步骤402d,将拟合后的直线段和曲线段首尾顺次连接,形成第二字体
进一步地,本实施例中,步骤402a-步骤402d的实现方式与本发明步骤401a-步骤401d的实现方式相似,在此不再一一赘述。
需要说明的是,对待处理字体的回路轮廓进行减细处理的线数与对待处理字体的回路轮廓进行加粗处理的线数相同,以更好的进行识别。
步骤403,对待处理字体、第一字体和第二字体进行填充处理,分别形成第一填充字体、第二填充字体和第三填充字体。
进一步地,图5为本发明实施例二中执行对第二字体进行填充处理,形成第三填充字体后的示意图。同理,如图5所示,将第二字体的回路轮廓内同样填充为黑色,以便更好的识别。
步骤404,显示第一填充字体、第二填充字体和第三填充字体,以将第一填充字体分别与第二填充字体、第三填充字体进行对比,识别出错误内外轮廓方向。
进一步地,如图2、图3和图5所示,在将待处理的字体分别进行加粗填充处理和减细填充处理后,由于第二填充字体是将待处理的字体进行加粗填充处理后形成的,所以字体在加粗处理后,相应的轮廓会变粗。若在第二填充字体中,有部分回路轮廓没有变粗反而变细,说明该部分回路轮廓的内外轮廓方向出现了错误。同理第三填充字体是将待处理的字体进行减细处理和填充处理后形成的,所以字体在减细处理后,相应的轮廓会变细。若在第三填充字体中,同一部分回路轮廓没有变细反而变粗,说明该部分回路轮廓的内外轮廓方向出现了错误。在图3和图5中,白色椭圆形线条圈起来的回路轮廓方向即为出现错误的方向。
本实施例提供的字体处理方法,通过对待处理字体的回路轮廓进行加粗处理,形成第一字体,对待处理字体的回路轮廓进行减细处理,形成第二字体,对待处理字体、第一字体和第二字体进行填充处理,分别形成第一填充字体、第二填充字体和第三填充字体,显示第一填充字体、第二填充字体和第三填充字体,以将第一填充字体分别与第二填充字体、第三填充字体进行对比,识别出错误内外轮廓方向。由于对待处理的字体分别进行加粗填充和减细填充处理,若在待处理的字体中具有错误内外轮廓方向,由于第二填充字体和第三填充字体对比明显,可更加高效地识别出字体中的错误内外轮廓方向的位置,并且更进一步地提高了识别的准确率。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图6为本发明字体处理装置实施例一的结构示意图,如图6所示,本实施例提供的字体处理装置包括:加粗处理模块61,填充处理模块62和显示模块63。
其中,加粗处理模块61,用于对待处理字体的回路轮廓进行加粗处理,形成第一字体。填充处理模块62,用于对待处理字体和第一字体进行填充处理,分别形成第一填充字体和第二填充字体。显示模块63,用于显示第一填充字体和第二填充字体,以将第一填充字体和第二填充字体进行对比,识别出错误内外轮廓方向。
本实施例提供的字体处理装置可以执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图7为本发明字体处理装置实施例二的结构示意图,如图7所示,本实施例在本发明字体处理装置实施例一的基础上,进一步地,还包括:减细处理模块71。
进一步地,减细处理模块71,用于对待处理字体的回路轮廓进行减细处理,形成第二字体。填充处理模块62,还用于对第二字体进行填充处理,形成第三填充字体。
进一步地,显示模块63,还用于:显示第三填充字体,以将第一填充字体分别和第二填充字体、第三填充字体进行对比,识别出错误内外轮廓方向。
进一步地,加粗处理模块61,具体包括:第一离散化处理子模块61a,第一平移处理子模块61b,第一拟合处理子模块61c和第一整合处理子模块61d。
其中,第一离散化处理子模块61a,用于对待处理字体的回路轮廓进行离散化处理。第一平移处理子模块61b,用于将回路轮廓离散点向外进行平移处理。第一拟合处理子模块61c,用于将平移处理后的回路轮廓离散点拟合为直线段和曲线段。第一整合处理子模块61d,用于将拟合后的直线段和曲线段首尾顺次连接,形成第一字体。
进一步地,减细处理模块71,具体包括:第二离散处理子模块71a,第二平移处理子模块71b,第二拟合处理子模块71c和第二整合处理子模块71d。
第二离散处理子模块71a,用于对待处理字体的回路轮廓进行离散化处理。第二平移处理子模块71b,用于将回路轮廓离散点向内进行平移处理。第二拟合处理子模块71c,用于将平移处理后的回路轮廓离散点拟合为直线段和曲线段。第二整合处理子模块71d,用于将拟合后的直线段和曲线段首尾顺次连接,形成第二字体。
进一步地,第一拟合处理子模块61c,具体用于:将平移处理后的回路轮廓离散点按待处理字体的回路轮廓的线段分成多个集合;将每个集合中的平移处理后的回路轮廓离散点拟合为直线段;判断每个集合中的回路轮廓离散点与拟合的直线段上的对应点的误差是否均小于预设阈值;若误差并非均小于预设阈值,则将集合中的平移处理后的回路轮廓离散点采用逐次调整拟合参数的最小二乘法拟合为三次贝塞尔曲线段。
进一步地,第二拟合处理子模块71c,具体用于:将平移处理后的回路轮廓离散点按待处理字体的回路轮廓的线段分成多个集合;将每个集合中的平移处理后的回路轮廓离散点拟合为直线段;判断每个集合中的回路轮廓离散点与拟合的直线段上的对应点的误差是否均小于预设阈值;若误差并非均小于预设阈值,则将集合中的平移处理后的回路轮廓离散点采用逐次调整拟合参数的最小二乘法拟合为三次贝塞尔曲线段。
本实施例提供的字体处理装置可以执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。