成耀 王晓瑜 顾翔 鲁松
摘要:该文在分析BMP格式的基础上,将BMP格式应用于个性化字库自动生成,读取的纸样模板扫描图像应用BMP格式,处理程序自动生成手写字的图像结果文件应用BMP格式。
关键词:BMP格式;个性化字库;自动生成
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2012)34-8243-02
有道是见字如面,使用手写体会让人倍感亲切。但是,在现实生活中人们基本上只使用宋体、楷体、黑体等少数几种字体。目前,只有少数人拥有自己的个性化字库[1]。比如,2007年4月27日下午徐静蕾发布了一款自己书写的个性化字体,此字体由方正电子根据徐静蕾的手写字体为其量身定做,被命名“方正静蕾简体”[2]。一种中文字库制作大约要5个专业人员花费1年的时间来完成,在各个阶段均需投入大量的人力、物力和财力,因此目前只有少数几家有实力的公司才能制作推出中文字库[3]。如果把这个大家喜爱的个性化字库比作旧时王谢堂前燕的话,那么如何才能让它飞入寻常百姓家呢?计算机技术的高速发展使得解决这个问题比以前要容易许多。在研究个性化字库自动生成的过程中,笔者发现可以将用户的手写体用高点阵图片文件格式存储,以后在使用中只要用相应软件调用图片文件就可以了。
1BMP格式
BMP是英文Bitmap(位图)的简写,它是Windows操作系统中的标准图像文件格式,能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发,BMP位图格式理所当然地被广泛应用。这种格式的特点是包含的图像信息较丰富,几乎不进行压缩,但由此导致了它与生俱生来的缺点——占用磁盘空间过大[4]。
尽管文件大小比较大,但是位图文件的简单性、在微软视窗和其他地方的广泛使用以及这种格式的优秀文档标准以及没有专利约束,使得它成为其他操作系统图像处理程序能够读写的一种最为常用的格式[5]。典型的位图文件格式通常包含下面几个数据块,位图头:保存位图文件的总体信息;位图信息:保存位图图像的详细信息;调色板:保存所用颜色的定义;位图数据:保存一个又一个像素的实际图像。
仔细分析BMP格式,笔者发现要尽可能多的保留图片信息,存储时可为24位位图格式。与之相对应的主要内容有:位图的第2、第3个字(即第3至第6个字节)保存位图文件大小;位图的第10、第11个字保存位图宽度(即位图总共有几列,以像素个数表示);位图的第12、第13个字保存位图高度(即位图总共有几行);位图的第18、第19个字保存图像大小(这是原始位图数据的大小,比位图文件少54个字节);位图数据:这部分逐个像素表示图像,像素是从下到上、从左到右保存的,每个像素使用三个字节表示,如果一个图像水平线的字节数不是4的倍数,这行就使用空字节补齐,通常是ASCII码0。
2个性化字库自动生成
一款好的个性化矢量字库是经过很复杂的工艺流程设计、加工出来的,成本一般都在几万元人民币以上,普通老百姓用不起。研究自动生成的个性化字库,能大大降低字库的开发成本,让普通的电脑用户都能消费得起,从而达到提高办公效率、节约时间的目标。
在个性化字库自动生成研究中,首先,要设计好自动化扫描识别纸样模板。一个好的纸样模板既能方便用户书写,又能适合计算机自动处理。早先设计的思想是对纸样模板上的字进行等比例大小切割,在实际试验中发现这种做法存在不少问题:问题一是手写的汉字大小不一;问题二是每个字的边缘都有大小不等的白边,使得以后使用字库中的字时,字与字的间距很难看。经过数次改进后,现在的纸样模板能较好地满足任务需求。其次,要设计一个自动化的图像文件处理程序。目前,处理程序能对扫描的图像文件进行自动识别、自动按实际大小切割,将手工书写的汉字做成一个个高点阵的字模文件以图片方式自动存储。
3BMP格式在个性化字库自动生成中的应用
1)对扫描的BMP图像文件的读取
因为BMP图像都是按字节存储的数值数据,所以在处理时用字节文件打开。打开后首先读出54字节的位图头、位图信息等内容存储到数组,接着用一个三重循环读出位图数据存储到数组,外循环处理行,中间循环处理列,内循环处理一个像素点。因为BMP的存储格式是从下到上,和我们平时阅读习惯从上到下不一样,所以,外循环步长取-1。
因为在BMP格式中,如果一个图像水平线的字节数不是4的倍数,这行就使用空字节补齐,所以在中间循环与外循环之间考虑读每一行后面的空字节数据。
2)生成手写字的BMP图像结果文件
首先,根据纸样模板编程计算出对应手写字的边框范围。其次,根据手写字对应像素与周边像素的黑白反差,采用逐步逼近的方法,精确求得BMP图像中一个手写字的上下左右起始像素位置。
然后,上下位置差加1,求得对应字BMP图像的高;左右位置差加1,求得对应字BMP图像的宽。
生成位图的第2、第3个字(即第3至第6个字节)保存位图文件大小的代码如下:
这里的变量W2_3为位图文件大小,它用十六进制表示,它相应的十进制数值为54+图像像素的行数*(图像的列数*3后再加上0至3,调节成4的倍数)。用相同的方法生成位图的第10、11、12、13、18、19字。
最后,根据前面得到的一个手写字的上下左右起始像素位置、图像的高、图像的宽。采用读取BMP图像文件类似的方法生成BMP图像结果文件。
4结果分析
程序能自动识别用户在纸样模板上的手写字,并将其生成BMP格式的结果文件。由国标GB2312-80规定的6763个汉字生成个性化字库,同时兼容GBK编码标准。以下为由个性化字库中部分汉字构成的样例:
由于采用高点阵,所以在不是故意放大很多倍的情况下能够保证字的清晰、自然,笔画连贯圆润。所有的字都是百分之百地保持原汁原味。因此,这是一款真正体现书写者个性化的字体。
BMP格式的个性化字库大大降低了字库的开发成本,它完全支持用户的日常使用,使普通的电脑用户都能消费得起。用户有了自己的个性化字库以后,可以一劳永逸地节约时间、提高办公效率。
参考文献:
[1]马文军.个性化中文字库构造初探[J].电脑知识与技术,2006(6):127-127.
[2]百科ROBOT.方正徐静蕾体[EB/OL].(2012-03-08).[2012-07-22].http://baike.baidu.com/view/1708957.htm.
[3]passion0728.计算机字库的版权法保护——由方正字库诉讼案件说起[EB/OL].(2011-10-11).[2012-07-22].http://wenku.baidu.com/view/4012598a680203d8ce2f24fd.html,
[4]selina_sai.BMP格式[EB/OL].(2012-8-30).[2012-9-18].http://baike.baidu.com/view/189487.htm.
[5]维基人.BMP[EB/OL].(2012-8-12).[2012-9-18].http://zh.wikipedia.org/wiki/BMP.