一种字形加粗方法
【专利摘要】本发明提供一种字形加粗方法,包括以下步骤:从字库中读取字形信息;通过字形信息判断字形的类别;若字形是点阵字形,则采用笔画线上像素点复制平移叠加的方法进行字形加粗;并且,将x方向的加粗幅度dx在字形高度H的1/72和1/48之间选取;将y方向的加粗幅度dy在dx的1/3至2/3之间选取;若字形是曲线轮廓字形,则采用将曲线控制点向笔画外侧平移的方法进行加粗;并且,将x方向的加粗幅度dx在字形高度H的1/72和1/48之间选取;将y方向的加粗幅度dy在dx的1/3至2/3之间选取。通过采取上述方法,对不同类别的字形分别进行加粗处理,且由于规定了x方向的加粗幅度与y方向的加粗幅度的取值,能够避免因字形加粗导致的笔画重叠,从而提升用户体验。
【专利说明】一种字形加粗方法
【技术领域】
[0001]本发明涉及计算机信息处理领域,更具体地说,涉及字体呈现技术,提供了一种字形加粗的方法。
【背景技术】
[0002]计算机通常通过鼠标、键盘、话筒、扫描仪、录像机等输入设备从用户接收输入,通过显示器、投影仪、或打印机等输出设备向用户提供输出来与用户进行交互。由于文字是信息交流的一种重要的手段,通常计算机要将文字呈现到显示器、投影仪或者打印到纸上。
[0003]在一种简化观点中,将文字呈现到输出设备的过程大体可以划分成四个阶段。在第一阶段,呈现引擎从字库中取出每个字的字形信息。在第二阶段,根据用户请求的风格,包括是否加粗、是否倾斜、是否添加下划线等等,呈现引擎对字形进行各种变形处理。在第三阶段,呈现引擎根据输出设备的分辨率对字形进行光栅化处理,将字形转换为用户请求的字号和适合用户输出设备分辨率(DPI)的实际输出尺寸的位图形式。在第四阶段,呈现引擎将光栅化后的字形位图形式输出到输出设备。
[0004]字库中的字形按描述方式可以分为点阵字形和曲线字形。
[0005]点阵字形通过预先设计的字符在某一特定尺寸的位图图像来描述字形,例如,16X16的点阵字库使用横向和纵向各有16个像素点的点阵来描述字形,点阵中处于字形笔画上的点可以用I表示,不在笔画上的像素点可以用O表示。这样一来,每个像素点可以使用一个比特位(Bit)表示,一个16X16点阵的字形总共需要16X16/8 = 32个字节。图1中给出了汉字“务”的16X16点阵字形数据。为了保证字形输出时不致导致锯齿效果,目前有些汉字字体采用256X256甚至1024X1024的点阵来描述字形。
[0006]曲线字形通过描述字符形状的周线轮廓来描述字形。一般使用贝塞尔曲线来描述字形的轮廓线。
[0007]如图2所示,一次贝塞尔曲线是从起点PO到终点Pl的直线段,其数学表示如下:
[0008]B(t) = P0+(P1-P0) t = (1-?)Ρ0+?Ρ1; t e [O, I]
[0009]如图3所示,二次贝塞尔曲线是从起点PO经过偏向中间点Pl到达终点P2的曲线段,其数学表示如下:
[0010]B(t) = (l-t)2p0+2t(l-t)P^t2P2, t e [O, I]
[0011]如图4所示,三次贝塞尔曲线是从起点PO经过偏向中间点Pl和P2,并最终到达终点P3的曲线段,曲线起始于PO走向Pl,并从P2的方向来到P3。一般不会经过Pl或P2 ;这两个点只是提供方向信息。PO和Pl之间的间距,决定了曲线在转而趋进P3之前,走向P2方向的“长度有多长”。其数学表示如下:
[0012]B (t) = P0 (l_t) 3+3?^ (l_t) 2+3P2t2 (l_t)+P3t3? T G [0,1]
[0013]目前常用的曲线字库中一般采用二次贝塞尔曲线或者三次贝塞尔曲线来描述字形轮廓,在字库中存储的实际上是字形轮廓上每一段曲线段或直线段的控制点(起点、终点、中间点)的坐标。图5给出了汉字“八”的曲线轮廓字形和控制点。
[0014]曲线字形在缩放的时候不易变形,在各种不同的分辨率下都能保证高质量的显示或打印效果。在光栅化处理过程中,曲线轮廓被转换为适合于在给定期望的磅值或像素数时的显示。
[0015]低分辨率的点阵字形,在设计的时候可以精确地调整每个像素点的值,在较小的字号(例如六号、七号)或低分辨率设备上显示效果较好;高分辨率的点阵字形会占据太大的存储空间,而高分辨率的曲线字形在较大字号(例如一号、二号)或高分辨率设备上显示设备较好,同时曲线字形数据占据的存储空间比相同尺寸的点阵字形要小很多。因此,为了同时兼顾低分辨设备和高分辨率设备上的输出效果,同一字库中可同时包含同一个字符的两类不同的字形描述数据,点阵字形数据用于在较小字号或低分辨率设备的输出,而曲线字形数据用于在较大字号或高分辨率设备的输出。
[0016]在某些情况下,用户可能希望使用“加粗”的字形。加粗的字形往往具有更厚重的视觉。在使用汉语书写的各类文档、出版的报纸期刊等,很多时候会将各级标题“加粗”,以达到更加醒目的效果。
[0017]传统上,大多数常用的具有较少量字符和相对简单的字形的字体(如英文字体)具有相关联的预先由人工设计好的真实粗体形式。然而,由于与字体设计相关联的时间和成本,大多数具有大量字符和相对复杂字形的字体(如汉字字体)没有相关联的真实粗体形式。因此,在目前很多信息处理设备如计算机、手机、PAD等中,如果用户选择粗体选项,很多时候是由呈现引擎对字形执行模拟加粗以实现“粗体”(Bold)的输出效果。
[0018]对于点阵字形,一种典型的加粗方法是复制平移叠加法。该方法首先将字形笔画线上的像素点,先复制dx份,并沿X方向(水平方向)分别平移1、2、3、......、dx个像素的距离,并将这些像素点与该字形点阵上原有的像素点进行叠加,这样原来的一个像素点形成了一条线段;其次,将该线段复制dy份,并沿y方向(竖直方向)分别平移1、2、3、……、dy个像素的距离。这样一来,原先的一个像素点便形成了一个宽度为dx+Ι像素、高度为dy+Ι像素的矩形。利用此方法将字形笔画线上的像素点全都做上述处理,即实现笔画“加粗”的效果。图6a、6b、6c显示了对点阵字形线上的像素点通过平移叠加实现笔画“加粗”效果的过程,图中,dx = dy = 2px。
[0019]对于曲线轮廓字形,可以将每个控制点分别沿X方向和/或y方向分别向笔画外侧平移dx/2和/或dy/2像素,即实现笔画沿X和y方向分别“加粗” dx和dy的效果。图7显示了汉字“八”的曲线轮廓字形通过平移控制点实现笔画“加粗”的过程。其中dx = dy=20px。若只需要沿X方向平移,则平移的距离为dx/2 ;若只需要沿y方向平移,则平移的距离为dy/2 ;若需要同时沿X和y方向平移,贝Ij其沿X和y方向分别平移的距离dxO和dyO由更复杂的方式计算获得,计算的原则是使得平移后得到的轮廓曲线段与平移之前的轮廓曲线段之间是平行关系。一种计算过程如图8所示。若平移方向与水平方向的夹角为Θ,则从坐标原点沿平移方向做直线,该直线与由dx和dy为直角边形成的直角三角形的斜边相交于P点,P点在X和y轴上的投影点距离坐标原点的距离dxOX 1/2和dyOX 1/2就是待平移的控制点的在X和I方向上的平移距离。
[0020]传统的字形加粗方法,一般在X方向和y方向上加粗的幅度dx和dy是相等的,对于字形高度为H的字形,一种典型的加粗幅度是dx = dy = HX 1/24。由于对加粗幅度计算的粗糙性,在某些笔画已经较粗的字体上,笔画稠密的字符,加粗之后可能导致笔画重叠的问题,使得文字显示模糊一团。图9给出了该问题的一个实例。
【发明内容】
[0021]本发明的目的是针对现有字形加粗方法可能导致笔画重叠的问题,提供一种字形加粗方法,能够避免因字形加粗导致的笔画重叠,从而提升用户体验。
[0022]所述方法包括以下步骤:
[0023]A.从字库中读取字形信息;
[0024]B.通过字形信息判断字形的类别;
[0025]C.若字形是点阵字形,则采用笔画线上像素点复制平移叠加的方法进行字形加粗;并且,将X方向的加粗幅度dx在字形高度H的1/72和1/48之间选取;将7方向的加粗幅度dy在dx的1/3至2/3之间选取;
[0026]D.若字形是曲线轮廓字形,则采用将曲线控制点向笔画外侧平移的方法进行加粗;并且,将X方向的加粗幅度dx在字形高度H的1/72和1/48之间选取;将7方向的加粗幅度dy在dx的1/3至2/3之间选取。
[0027]进一步地,所述方法还包括步骤E:将经过步骤C或步骤D加粗后的字形做光栅化处理,将加粗后的字形转换为用户请求的字号和适合用户输出设备分辨率的实际输出尺寸的位图形式。
[0028]进一步地,所述方法还包括步骤F:将光栅化后的位图形式的字形输出到输出设备。
[0029]进一步地,所述输出设备选自显示器、投影仪、或打印机中的一种。
[0030]进一步地,步骤C中dx选取为字形高度H的1/64。
[0031]进一步地,步骤D中dx选取为字形高度H的1/64。
[0032]进一步地,步骤C中dy选取为dx的1/2。
[0033]进一步地,步骤D中dy选取为dx的1/2。
[0034]通过采取上述方法,对不同类别的字形分别进行加粗处理,且由于规定了 X方向的加粗幅度与y方向的加粗幅度的取值,能够避免因为加粗导致一些笔画稠密的字形出现笔画重叠的现象。从而达到清楚地突出显示字体的目的,提升用户的体验。
【专利附图】
【附图说明】
[0035]图1为【背景技术】中汉字“务”的16X 16点阵字形示意图。
[0036]图2为【背景技术】中由两个控制点确定的一次贝塞尔曲线示意图。
[0037]图3为【背景技术】中由三个控制点确定的二次贝塞尔曲线示意图。
[0038]图4为【背景技术】中由四个控制点确定的三次贝塞尔曲线示意图。
[0039]图5为【背景技术】中汉字“八”的曲线轮廓字形及控制点的示意图。
[0040]图6a、6b、6c为【背景技术】中点阵字形通过笔画线上像素点复制平移叠加实现加粗的过程示意图。
[0041]图7为【背景技术】中汉字“八”曲线轮廓字形通过曲线控制点向笔画外侧平移实现加粗的过程示意图。
[0042]图8为【背景技术】中根据平移方向计算平移距离dxO和dyO的方法示意图。
[0043]图9为传统的字形加粗方法导致的笔画重叠问题的实例示意图。
[0044]图10a、10b、10c、10d、10e分别为对某一款字体的字形不加粗和加粗幅度分别为字形高度H的1/96、1/72、1/48、1/24的显示效果图。
[0045]图11为本发明所述方法的实施流程示意图。
[0046]图12a、12b分别为实施例一中的汉字“量”的字形不加粗、加粗的效果图。
[0047]图13a、13b分别为实施例二中的汉字“量”的字形不加粗、加粗的效果图。
[0048]图14a、14b分别为实施例三中的汉字字符串“质量堪忧囉寵寵”的字形不加粗、力口粗的效果图。
【具体实施方式】
[0049]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0050]一般来说,汉字字形笔画数量变化较大,最简单的汉字只有一笔,复杂的汉字的笔画数量甚至可能达到数十笔,考虑到字形加粗比不加粗带来的浓重程度视觉效果,以及笔画稠密汉字上避免加粗导致笔画重叠问题,“加粗”方法需要在二者之间寻找一种平衡,确定合适的加粗幅度dx和dy。由于大部分的汉字尤其是笔画稠密的汉字中,横向的笔画数量一般会多于竖向笔画的数量,例如汉字“量”字,其横向的笔画有9笔,竖向的笔画只有3笔。因此,一般来说,横向比竖向有更多的空间可以用于字形加粗。因此,为汉字选择小于横向加粗幅度dx的竖向加粗幅度dy是更优的方案。
[0051]为了确定合适的加粗幅度,根据对各种不同笔画稠密程度的汉字和各种不同粗细程度的汉字字库进行了实验。图10a、10b、10c、10d、10e分别给出了针对选择的典型汉字串“质量堪忧囉寵寵”对某一款字体的字形不加粗和加粗幅度分别为字形高度H的1/96、1/72、1/48、1/24的显示效果。在实验的过程中,针对如下所列多款字体进行了实验:
[0052]?微软雅黑、宋体、仿宋、楷体、黑体、幼圆;
[0053]?华文中宋、华文仿宋、华文宋体、华文彩云、华文新魏、华文琥珀、华文细黑、华文行楷、华文隶书;
[0054]?文泉驿微米黑、文泉驿正黑、文泉驿点阵正黑、文泉驿等宽微米黑、文泉驿等宽正黑;
[0055]?方正仿宋、方正宋体、方正小标宋、方正楷体、方正细黑一、方正行楷、方正超粗黑、方正隶书、方正魏碑、方正黑体、隶书。
[0056]根据实验结果,按如下的方式选择加粗幅度,能够带来更优的加粗效果,进而提升用户体验。
[0057](I)X方向的加粗幅度dx在字形高度H的1/72和1/48之间选取。
[0058](2)y方向的加粗幅度dy在dx的1/3至2/3之间选取。
[0059]如图11所示,本发明所述的方法700的具体流程是:对于待输出的文字702,步骤704呈现引擎从字库中读取待输出的文字的字形信息;步骤706呈现引擎判断字形是点阵字形还是曲线轮廓字形;若是点阵字形,步骤708呈现引擎采用对笔画线上点进行复制平移叠加的方法进行加粗,并且,将X方向的加粗幅度dx控制在字形高度H的1/72和1/48之间。将y方向的加粗幅度dy控制在dx的1/3至2/3之间;若是曲线轮廓字形,步骤710呈现引擎采用将曲线轮廓控制点平移的方法进行加粗,并且,将X方向的加粗幅度dx控制在字形高度H的1/72和1/48之间。将y方向的加粗幅度dy控制在dx的1/3至2/3之间;步骤712呈现引擎对加粗之后的字形进行光栅化处理,将字形转换为用户请求的字号和适合用户输出设备分辨率的实际输出尺寸的位图形式;步骤714将光栅化后的位图形式的字形输出到输出设备。
[0060]上述过程中,所述呈现引擎是指计算机系统中处理字形显现的软件,例如,在Windows系列操作系统上,完成字形处理的呈现引擎软件是Uniscribe,在Linux操作系统上,呈现引擎是 FreeType、Xft、FontConfig、Harfbuzz、pango 等一系列软件。
[0061]下面结合附图和具体实施例来对本发明提供的技术方案进行详细描述。
[0062]实施例一:一个点阵字形在投影仪上显示汉字“量”的加粗字形的过程
[0063]对于待显示的汉字“量”702,根据用户设定的字体“宋体”和12磅(pt)的字号,步骤704呈现引擎从宋体字库中取出其字形信息。步骤706呈现引擎检测字形信息发现该字形是256X256的点阵字形。步骤708呈现引擎将水平方向的加粗幅度dx设置为字形高度的1/48,即5.3个像素点,四舍五入后为5个像素点,并将竖直方向的加粗幅度dy设置为dx的1/3即1.6个像素点,四舍五入后为2个像素点,;然后对该字形中的所有的笔画线上点沿水平方向复制5份并分别平移1、2、3、4、5个像素点的距离,与点阵字形中原有的像素点叠加;然后,再对沿水平方向平移叠加之后的字形中的所有的笔画线上点沿水平方向复制2份并分别平移1、2个像素点的距离,与点阵字形中原有的像素点叠加。步骤712呈现引擎根据用户设定的12磅字号和投影仪96dpi的分辨率对字形进行光栅化处理,形成实际显示尺寸的位图形式。步骤714呈现引擎将光栅化后的字形位图形式输出到显示器。图12a和图12b分别显示了实施例一中的汉字“量”的字形不加粗和加粗的显示效果。
[0064]实施例二:一个曲线轮廓字形在打印机上打印汉字“量”的加粗字形的过程
[0065]对于待打印的汉字“量”702,根据用户设定的字体“华文琥珀”和48磅(pt)的字号,步骤704呈现引擎从字库中取出其字形信息。步骤706呈现引擎检测字形信息发现该字形是按2048X2048的坐标尺寸提供坐标信息的曲线轮廓字形。步骤710呈现引擎将水平方向的加粗幅度dx设置为字形高度的1/72,即28个像素点,并将竖直方向的加粗幅度dy设置为dx的2/3即19个像素点;然后对该字形上所有的控制点,根据其处于笔画轮廓曲线上的位置,分别沿X方向和/或y方向向笔画外侧平移,沿X方向平移的距离为加粗幅度dx的1/2,即14个像素点,沿y方向平移的距离为加粗幅度dy的1/2,即10个像素点,形成加粗之后的曲线字形。步骤712呈现引擎根据用户设定的48磅(pt)的字号和打印机300dpi的分辨率对字形进行光栅化处理,形成实际打印尺寸的位图形式。步骤714呈现引擎将光栅化后的字形位图形式输出到打印机。图13a和图13b分别显示了实施例二中的汉字“量”的字形不加粗和加粗的显示效果。
[0066]实施例三:一个点阵字形在显示器上显示汉字字符串“质量堪忧囉寵寵”的加粗字形的过程
[0067]对于待显示的汉字字符串“质量堪忧囉寵寵”中的每个汉字702,根据用户设定的字体“方正超粗黑”和72磅(pt)的字号,步骤704呈现引擎从字库中取出其字形信息。步骤706呈现引擎检测字形信息发现该字形是2048X2048的坐标尺寸提供坐标信息的曲线轮廓字形。步骤710呈现引擎将水平方向的加粗幅度dx设置为字形高度的1/64,即32个像素点,并将竖直方向的加粗幅度dy设置为dx的1/2即16个像素点;然后对该字形上所有的控制点,根据其处于笔画轮廓曲线上的位置,分别沿X方向和/或y方向向笔画外侧平移,沿X方向平移的距离为加粗幅度dx的1/2,即16个像素点,沿y方向平移的距离为加粗幅度dy的1/2,即8个像素点,形成加粗之后的曲线字形。步骤712呈现引擎根据用户设定的72磅(pt)的字号和显示器96dpi的分辨率对字形进行光栅化处理,形成实际显示尺寸的位图形式。步骤714将光栅化后的字形位图形式按照计算之后的坐标位置输出到显示器。图14a和图14b分别显示了实施例三中的汉字字符串“质量堪忧囉寵寵”的字形不加粗和加粗的显示效果。
[0068]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种字形加粗方法,包括以下步骤: A.从字库中读取字形信息; B.通过字形信息判断字形的类别; C.若字形是点阵字形,则采用笔画线上像素点复制平移叠加的方法进行字形加粗;并且,将X方向的加粗幅度dx在字形高度H的1/72和1/48之间选取;将y方向的加粗幅度dy在dx的1/3至2/3之间选取; D.若字形是曲线轮廓字形,则采用将曲线控制点向笔画外侧平移的方法进行加粗;并且,将X方向的加粗幅度dx在字形高度H的1/72和1/48之间选取;将y方向的加粗幅度dy在dx的1/3至2/3之间选取。
2.根据权利要求1所述的字形加粗方法,其特征在于,还包括步骤E:将经过步骤C或步骤D加粗后的字形做光栅化处理,将加粗后的字形转换为用户请求的字号和适合用户输出设备分辨率的实际输出尺寸的位图形式。
3.根据权利要求2所述的字形加粗方法,其特征在于,还包括步骤F:将光栅化后的位图形式的字形输出到输出设备。
4.根据权利要求3所述的字形加粗方法,其特征在于,所述输出设备选自显示器、投影仪、或打印机中的一种。
5.根据权利要求1所述的字形加粗方法,其特征在于,所述方法通过一呈现引擎实现。
6.根据权利要求1所述的字形加粗方法,其特征在于,步骤C中dx选取为字形高度H的 1/64。
7.根据权利要求1所述的字形加粗方法,其特征在于,步骤D中dx选取为字形高度H的 1/64。
8.根据权利要求1所述的字形加粗方法,其特征在于,步骤C中dy选取为dx的1/2。
9.根据权利要求1所述的字形加粗方法,其特征在于,步骤D中dy选取为dx的1/2。
【文档编号】G06T11/00GK104133809SQ201410363929
【公开日】2014年11月5日 申请日期:2014年7月28日 优先权日:2014年7月28日
【发明者】刘汇丹, 洪锦玲, 芮建武, 吴健, 刘奎恩 申请人:中国科学院软件研究所