一种用于pos平台的阿拉伯语显示方法
【专利摘要】本发明公开了一种用于POS平台的阿拉伯语显示方法,包括:采用freetype库构建矢量字体库的对象,并读取字体文件,从而获取待显示字符串的阿拉伯语本地编码;将获取的本地编码转换为unicode编码;计算编码转换后的待显示字符串的总长度,然后根据计算出的总长度和屏幕的总长度确定显示位置的起始点;根据阿拉伯语连写与变形规则对编码转换后的待显示字符串进行变换处理,从而得到新字符串;提取新字符串中所有字符的位图信息,并根据确定的起始点将提取的位图信息显示在屏幕上。本发明引入了矢量字体来进行显示,具有操作简单、显示效果好、通用性强和兼容性较好的优点。本发明可广泛应用于字体显示领域。
【专利说明】—种用于POS平台的阿拉伯语显示方法
【技术领域】
[0001]本发明涉及一种字体显示方法,尤其是一种用于POS平台的阿拉伯语显示方法。【背景技术】
[0002]名词解释:
POS:point of sale ;
非等宽字体:类似阿拉伯语这种每个字符的宽度不同的字体。
[0003]点阵字体具有使用比较灵活、占用空间较小和显示速度较快的优点。目前金融支付领域的POS机一般采用点阵字体来做显示界面。随着行业的发展和客户的对象群体增加,对于POS平台的显示要求也越来越高,需要POS平台既能对斜体、不同大小和不同粗细的字体进行显示,也能对阿拉伯语这类非等宽字体进行显示。
[0004]点阵字体存储的仅是匹配大小的位图信息,并不能自由变换大小、粗细或倾斜度,否则会引起字形的失真。因此,当需要有不同大小、粗细或倾斜度的字体显示的时候,POS平台中需要全部修改其中的字体显示模块或需要对应的字库支持,操作起来十分复杂且显示效果较差。另外,点阵字体无法为单个字体设置单独的大小,只能显示等宽字体而无法显示阿拉伯语这类非等宽字体,通用性不强且兼容性较差。
【发明内容】
[0005]为了解决上述技术问 题,本发明的目的是:提供一种操作简单、显示效果好、通用性强和兼容性好用于POS平台的阿拉伯语显示方法。
[0006]本发明解决其技术问题所采用的技术方案是:一种用于POS平台的阿拉伯语显示方法,包括:
A、采用freetype库构建矢量字体库的对象,并读取字体文件,从而获取待显示字符串的阿拉伯语本地编码;
B、将获取的本地编码转换为Unicode编码;
C、计算编码转换后的待显示字符串的总长度,然后根据计算出的总长度和屏幕的总长度确定显示位置的起始点;
D、根据阿拉伯语连写与变形规则对编码转换后的待显示字符串进行变换处理,从而得到新字符串;
E、提取新字符串中所有字符的位图信息,并根据确定的起始点将提取的位图信息显示在屏幕上。
[0007]进一步,所述步骤D,其包括:
D1、对编码转换后的待显示字符串进行连写变换处理,从而得到连写变换后的字符
串;
D2、对连写变换后的字符串进行变形处理,从而得到新字符串。
[0008]进一步,所述步骤Dl,其包括:Dll、判断编码转换后的待显示字符串中第i个字符是否同时满足其前面一个字符存在且后面一个字符属于连写字符集,若是,则执行步骤D12,反之,则转至步骤D13,所述i为自2开始的自然数,且2≤i≤length,所述length为计算出的总长度;
D12、判断第i个字符的前面一个字符是否属于变形前置字符集,若是,则将第i个字符变为连写字符集I中的对应字符,反之,则将第i个字符变为连写字符集O中的对应字符;D13、判断i是否满足i ( length,若是,则执行i++,然后返回步骤Dll,反之,则转至步骤D2。
[0009]进一步,所述步骤D2,其包括:
D21、判断连写变换后的字符串中第m个字符的前面一个字符或后面一个字符是否属于变形字符集,若是,则执行步骤D22,反之,则转至步骤D23,所述m为自I开始的自然数,且 I < m < length ;
D22、根据判断的结果将第m个字符修正为变形字符集中对应的新Unicode编码;
D23、判断m是否满足111≤length,若是,则执行m++,然后返回步骤D21,反之,则转至步骤E。
[0010]进一步,所述步骤E,其包括:
E1、采用freetype库的API函数对新字符串中第η个字符的位图信息进行提取,所述η为自I开始的自然数,且I≤η≤length ;
E2、根据确定的起始点将第η个字符的位图信息显示在屏幕的位置(xn,yn)上;
E3、将显示位置的起始点向左水平移动widthn,所述widthn为第η个字符的位图宽
度;
Ε4、判断η是否满足n ( length,若是,则执行n++,然后返回步骤E1,反之,则结束操作,所述待显不子符串在屏眷中显不完毕。
[0011]进一步,所述步骤E1,其包括:
E11、判断屏幕的分辨率是否高于预设的分辨率阈值,若是,则执行步骤E12,反之,则执行步骤E13 ;
E12、采用256灰阶渲染的方式或单色渲染的方式对第η个字符的位图信息进行提取;Ε13、采用改进的256灰阶渲染方式对第η个字符的位图信息进行提取,从而将第η个字符中像素点灰阶信息高于预设阈值的点取出来构造字体轮廓。
[0012]进一步,所述步骤Ε2,其包括:
Ε21、从提取出的第η个字符的位图信息中获取所需的度量信息,然后根据获取的度量信息对确定的起始点进行纵向调整,从而使第η个字符按基准线进行排列;
Ε22、根据纵向调整后的起始点将第η个字符的位图信息显示在屏幕的位置(xn,yn)上。
[0013]进一步,所述所需的度量信息为第η个字符的最上点至位图所在区域顶层的距离和基准线到区域顶层的距离。
[0014]本发明的有益效果是:引入了能自由变换大小、粗细或倾斜度的矢量字体,并在freetype开源库的支撑下,解决了点阵字体无法正常显示阿拉伯语以及不能自由变化字体大小、粗细和倾斜度的问题,操作简单,显示效果好且通用性强,提高了 POS机的用户界面体验;同时也能扩展到其它类似阿拉伯语的非等宽字体显示,兼容性较好。【专利附图】
【附图说明】
[0015]下面结合附图和实施例对本发明作进一步说明。
[0016]图1为本发明一种用于POS平台的阿拉伯语显示方法的步骤流程图;
图2为本发明步骤D的流程图;
图3为本发明步骤Dl的流程图;
图4为本发明步骤D2的流程图;
图5为本发明步骤E的流程图;
图6为本发明步骤El的流程图;
图7为本发明步骤E2的流程图;
图8为本发明阿拉伯语连写与变形规则的算法流程图。
【具体实施方式】
[0017]参照图1,一种用于POS平台的阿拉伯语显示方法,包括:
A、采用freetype库构建矢量字体库的对象,并读取字体文件,从而获取待显示字符串的阿拉伯语本地编码;
B、将获取的本地编码转换为Unicode编码;
C、计算编码转换后的待显示字符串的总长度,然后根据计算出的总长度和屏幕的总长度确定显示位置的起始点;
D、根据阿拉伯语连写与变形规则对编码转换后的待显示字符串进行变换处理,从而得到新字符串;
E、提取新字符串中所有字符的位图信息,并根据确定的起始点将提取的位图信息显示在屏幕上。
[0018]其中,采用freetype库构建矢量字体库的对象是指,采用freetype库中支持阿拉伯文的开源字库tahoma.ttf来构造字体库对象。构建好字体库对象后,读取字体文件时就可以根据字体文件中的索引信息从字体库中查找到待显示字符串的阿拉伯语本地编码。
[0019]由于freetype库提取字符位图信息及后面的变形换处理均需要采用Unicode编码,而在显示阿拉伯语字符串的时候一般需用到本地编码,所以本发明还要利用iconv命令进行编码转换,并以UTF8格式作为中间格式(即本地编码先转换为utf8码,然后再由utf8码转换为Unicode编码)。
[0020]本发明计算编码转换后的待显示字符串的总长度时,先获取待显示字符串中所有字符的宽度,然后再将获取的所有字符的宽度累加起来作为计算出的总长度。由于阿拉伯字体的显示方式是从右向左,而屏幕的总长度是固定的,所以需要获得待显示字符串的总长度后才可以知道字符布局的右起始点(即显示位置的起始点)。
[0021]进行变换处理,主要是指根据阿拉伯语连写与变形规则进行连写变换及进行变形变换。其中连写变换的优先级较高,因此进行变换处理先完成连写变换,然后再进行变形变换。
[0022]参照图2,进一步作为优选的实施方式,所述步骤D,其包括:
D1、对编码转换后的待显示字符串进行连写变换处理,从而得到连写变换后的字符串;
D2、对连写变换后的字符串进行变形处理,从而得到新字符串。
[0023]参照图3,进一步作为优选的实施方式,所述步骤D1,其包括:
D11、判断编码转换后的待显示字符串中第i个字符是否同时满足其前面一个字符存在且后面一个字符属于连写字符集,若是,则执行步骤D12,反之,则转至步骤D13,所述i为自2开始的自然数,且2大于i大于length,所述length为计算出的总长度;
D12、判断第i个字符的前面一个字符是否属于变形前置字符集,若是,则将第i个字符变为连写字符集I中的对应字符,反之,则将第i个字符变为连写字符集O中的对应字符;D13、判断i是否满足i ( length,若是,则执行i++,然后返回步骤Dll,反之,则转至步骤D2。
[0024]根据阿拉伯语连写变换规则,在进行连写变换时,本发明先根据第i个字符相邻两字符(第1-Ι个字符和第i+Ι个字符)的具体情况判断是否需要进行连写变换,若需要,则再根据前面一个字符是否属于变形前置字符集将第i个字符变换为连写字符集O或I中的对应字符。其中,连写字符集O为现有阿拉伯语连写变换规则所规定的数组0,而连写字符集I为现有阿拉伯语连写变换规则所规定的数组I。连写字符集O或I中的对应字符(SPUnicode编码),可以从事先给出的连写变换对照表中查询到。
[0025]参照图4,进一步作为优选的实施方式,所述步骤D2,其包括:
D21、判断连写变换后的字符串中第m个字符的前面一个字符或后面一个字符是否属于变形字符集,若是,则 执行 步骤D22,反之,则转至步骤D23,所述m为自I开始的自然数,且 I < m < length ;
D22、根据判断的结果将第m个字符修正为变形字符集中对应的新Unicode编码;
D23、判断m是否满足m大于length,若是,则执行m++,然后返回步骤D21,反之,则转至步骤E。
[0026]根据阿拉伯语变形变换规则,变形变换可分为前连变换front (前面一个字符属于变形前置字符集1),后连变换last (后面一个字符属于变形后置字符集2),中间变换middle (前面一个字符属于变形前置字符集1,后面一个字符属于变形后置字符集2)和单独变换alone (前面一个字符不属于变形前置字符集1,后面一个字符不属于变形后置字符集2)这四种情况。在进行变形变换时,本发明根据第m个字符相邻两字符(第m-Ι个字符和第m+1个字符)的具体情况将第m个字符修正为变形字符集中对应的新Unicode编码。其中,变形字符前置集I和变形字符集2为现有阿拉伯语变形变换规则所规定的集合I和集合2。新Unicode编码可以从事先给出的变形变换对照表中查询到。
[0027]参照图5,进一步作为优选的实施方式,所述步骤E,其包括:
E1、采用freetype库的API函数对新字符串中第η个字符的位图信息进行提取,所述η为自I开始的自然数,且I大于η大于length ;
E2、根据确定的起始点将第η个字符的位图信息显示在屏幕的位置(xn,yn)上;
E3、将显示位置的起始点向左水平移动widthn,所述widthn为第η个字符的位图宽
度;
Ε4、判断η是否满足n ( length,若是,则执行n++,然后返回步骤E1,反之,则结束操作,所述待显不子符串在屏眷中显不完毕。[0028]本发明调用freetype库的API函数设置字符位图的大小和渲染方式等属性(包括大小、粗细和斜体等)。
[0029]参照图6,进一步作为优选的实施方式,所述步骤E1,其包括:
E11、判断屏幕的分辨率是否高于预设的分辨率阈值,若是,则执行步骤E12,反之,则执行步骤E13 ;
E12、采用256灰阶渲染的方式或单色渲染的方式对第η个字符的位图信息进行提取;Ε13、采用改进的256灰阶渲染方式对第η个字符的位图信息进行提取,从而将第η个字符中像素点灰阶信息高于预设阈值的点取出来构造字体轮廓。
[0030]本发明对freetype库提取的字符位图通过渲染方式加上对像素灰阶的定位选取即采用改进的256灰阶渲染方式进行位图信息提取,达到使字体变细的效果,可以更好地在POS平台(屏幕分辨率一般较小,如黑白屏)上使用。
[0031]参照图7,进一步作为优选的实施方式,所述步骤E2,其包括:
E21、从提取出的第η个字符的位图信息中获取所需的度量信息,然后根据获取的度量信息对确定的起始点进行纵向调整,从而使第η个字符按基准线进行排列;
Ε22、根据纵向调整后的起始点将第η个字符的位图信息显示在屏幕的位置(xn,yn)上。
[0032]对确定的起始点进行纵向调整,是为了防止出现阿拉伯字符串水平排列错位的情况。
[0033]进一步作为优选的实施方式,所述所需的度量信息为第η个字符的最上点至位图所在区域顶层的距离和基准线到区域顶层的距离。
[0034]下面结合说明书附图对本发明的具体实施例作进一步详细说明。
[0035]实施例1
该实施例主要介绍本发明阿拉伯语连写与变形规则的算法流程图。
[0036]本发明对待显示的字符串string [length]进行处理,主要是指进行变形及连写规则的变换,其中连写规则的优先级较高,length为待显示字符串的长度。
[0037]参照图8,本发明阿拉伯语连写与变形规则的算法流程如下:
(I)根据连写规则进行变换,对需连写字符string[i]进行变换,2≤i ≤ length。
[0038]对于string [i],如果string [1-Ι]存在且string [i+Ι]属于连写字符集,则string[i]需要连写变换,反之则不需要连写变换,且string[i]的连写变换又分为以下两种情况:
若 string [i_l]属于变形前置字符集,则 string [i]= Arabic_TogetherChar_Set[char_id] [I];
否则,string[i]=Arabic_TogetherChar_Set[char_id] [0]。上述赋值语句的含义是根据实际情况将string[i]变化到连写字符集O或I中的对应字符中。
[0039](2)根据阿拉伯语变形规则,对需变形字符string[m]进行变换,1 ≤ m ≤ length。进行变形变换又可以分为以下四种情况:
若string[m]前面字符属于变形前置字符集1,后面字符不属于变形后置字符集2,则string[m]=Arabic_Transformation_Set[char_id][front];
若string[m]前面字符不属于变形前置字符集1,后面字符属于变形后置字符集2,则string[m]=Arabic_Transformation_Set[char_id][last];
若string[m]前面与后面字符均属于变形字符集,则 string[m]=Arabic_Transformation_Set[char_id][middle];
若string[m]前面与后面字符均不属于变形字符集,则 string[m]=Arabic_Transformation_Set[char_id][alone]。
[0040]上述赋值语句的含义是根据实际情况将string[m]变化到front、last、middle和alone这四种情况的对应Unicode编码中。
[0041]实施例2
该实施例主要介绍字体的粗细调节是如何实现的。
[0042]显示的效果无疑是pos平台界面中最为重要的,在pos平台上点阵字体之所以可以一直被各公司所采用,其中很大的特点就是点阵字体可以自己进行微调从而达到近乎完美的显示效果。矢量字体采用的是数学的矩阵变换算法,对于高分辨率屏幕而言,其显示效果良好,但是对于分辨率较低的pos平台而言,则其还需要进行调整以达到良好的显示效果O
[0043]字体的粗细调节分以下两种情况来实现:
一是屏幕分辨率高的情况下,可以通过渲染方式来进行粗细字体的配置,即利用256灰阶或单色渲染方式进行字符的位图信息提取,这样字体就可以实现粗细的不同实现。渲染配置需要调用 FT_L0AD_M0N0CHR0ME 与 FT_L0AD_N0_AUT0HINT 函数。
[0044]二是屏幕分辨率较低尤其是POS机采用黑白屏时,自带的单色渲染方式实际效果可能较差。因此,本发明采取方法为将256灰阶渲染方式的位图信息进行修改,以某个界限值bounds为分割线,高于bounds的点才进行显示,比如将所有的像素点灰阶信息为255提取出来构造字体轮廓。
[0045]即 if bitmap[i][j]>bounds, display the bitmap , else don,t display it。其中,bitmap[i] [j]代表位图。
[0046]实施例3
该实施例主要介绍字体的排版布局。
[0047]通过freetype库取出字符位图信息后,还要利用其中的度量信息将字符串按照基准线进行排列,否则直接显示的话会出现水平排列错位的情况。
[0048]假设我们需要将字符串string在(x_topleft, y_topleft)点开始显示,该点为水平显示坐标上的基准点,对于每个字符char, freetype库提取出的位图信息bitmap需要使用的度量信息为字符的最上点至位图所在区域顶层的距离bitmap_top以及基准线到区域顶层的距离ascender。为了实现字符在基准线上水平对齐,对于字符string[i]的纵向像素点起始位置如下处理:
string[i]->st art_y =y_topleft+(ascender-b i tmap_top)。
[0049]以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
【权利要求】
1.一种用于POS平台的阿拉伯语显示方法,其特征在于,包括: A、采用freetype库构建矢量字体库的对象,并读取字体文件,从而获取待显示字符串的阿拉伯语本地编码; B、将获取的本地编码转换为Unicode编码; C、计算编码转换后的待显示字符串的总长度,然后根据计算出的总长度和屏幕的总长度确定显示位置的起始点; D、根据阿拉伯语连写与变形规则对编码转换后的待显示字符串进行变换处理,从而得到新字符串; E、提取新字符串中所有字符的位图信息,并根据确定的起始点将提取的位图信息显示在屏幕上。
2.根据权利要求1所述的一种用于POS平台的阿拉伯语显示方法,其特征在于: 所述步骤D,其包括: D1、对编码转换后的待显示字符串进行连写变换处理,从而得到连写变换后的字符串; D2、对连写变换后的字符串进行变形处理,从而得到新字符串。
3.根据权利要求2所述的一种用于POS平台的阿拉伯语显示方法,其特征在于:所述步骤Dl,其包括: D11、判断编码转换后的待显 示字符串中第i个字符是否同时满足其前面一个字符存在且后面一个字符属于连写字符集,若是,则执行步骤D12,反之,则转至步骤D13,所述i为自2开始的自然数,且2≤i≤length,所述length为计算出的总长度; D12、判断第i个字符的前面一个字符是否属于变形前置字符集,若是,则将第i个字符变为连写字符集I中的对应字符,反之,则将第i个字符变为连写字符集O中的对应字符;D13、判断i是否满足i ( length,若是,则执行i++,然后返回步骤Dll,反之,则转至步骤D2。
4.根据权利要求3所述的一种用于POS平台的阿拉伯语显示方法,其特征在于:所述步骤D2,其包括: D21、判断连写变换后的字符串中第m个字符的前面一个字符或后面一个字符是否属于变形字符集,若是,则执行步骤D22,反之,则转至步骤D23,所述m为自I开始的自然数,且 I < m < length ; D22、根据判断的结果将第m个字符修正为变形字符集中对应的新Unicode编码; D23、判断m是否满足111≤length,若是,则执行m++,然后返回步骤D21,反之,则转至步骤E。
5.根据权利要求4所述的一种用于POS平台的阿拉伯语显示方法,其特征在于:所述步骤E,其包括: E1、采用freetype库的API函数对新字符串中第η个字符的位图信息进行提取,所述η为自I开始的自然数,且I≤η≤length ; E2、根据确定的起始点将第η个字符的位图信息显示在屏幕的位置(xn,yn)上; E3、将显示位置的起始点向左水平移动widthn,所述widthn为第η个字符的位图宽度;E4、判断η是否满足n ( length,若是,则执行n++,然后返回步骤E1,反之,则结束操作,所述待显不子符串在屏眷中显不完毕。
6.根据权利要求5所述的一种用于POS平台的阿拉伯语显示方法,其特征在于:所述步骤El,其包括: EU、判断屏幕的分辨率是否高于预设的分辨率阈值,若是,则执行步骤E12,反之,则执行步骤E13 ; E12、采用256灰阶渲染的方式或单色渲染的方式对第η个字符的位图信息进行提取;Ε13、采用改进的256灰阶渲染方式对第η个字符的位图信息进行提取,从而将第η个字符中像素点灰阶信息高于预设阈值的点取出来构造字体轮廓。
7.根据权利要求5所述的一种用于POS平台的阿拉伯语显示方法,其特征在于:所述步骤Ε2,其包括: Ε21、从提取出的第η个字符的位图信息中获取所需的度量信息,然后根据获取的度量信息对确定的起始点进行纵向调整,从而使第η个字符按基准线进行排列; Ε22、根据纵向调整后的起始点将第η个字符的位图信息显示在屏幕的位置(xn,yn)上。
8.根据权利要求7所述的一种用于POS平台的阿拉伯语显示方法,其特征在于:所述所需的度量信息为第η个字符 的最上点至位图所在区域顶层的距离和基准线到区域顶层的距离。
【文档编号】G07G1/14GK103489268SQ201310400702
【公开日】2014年1月1日 申请日期:2013年9月6日 优先权日:2013年9月6日
【发明者】董凯 申请人:深圳市新国都技术股份有限公司