当前位置:文档之家› 网络二维码图片的生成算法研究

网络二维码图片的生成算法研究

第26卷 第2期2009年4月 黑龙江大学自然科学学报JOURNAL OF NAT URAL SC I E NCE OF HE I L ONGJ I A NG UN I V ERSI TY Vol 126No 12Ap ril,2009网络二维码图片的生成算法研究康春颖(黑龙江大学信息科学与技术学院,哈尔滨150080)摘 要:二维码作为一种新兴的条码,在网络中被越来越多的使用。

通过从多种图片格式中筛选出能显示出同等信息的最小存储量的图片格式,即单色BMP 位图格式,然后通过分析BMP 文件格式,提出一种支持在线生成的网络图片生成算法,结合通用二维码组件生成的数据,可以在线生成网络二维码图片。

采用本算法生成的二维码图片,可以最小化图片文件体积,极大地提高了网络中二维码图片的显示速度。

关键词:二维码;生成算法;研究中图分类号:T N919.81文献标志码:A 文章编号:1001-7011(2009)02-0216-04收稿日期:2008-01-16基金项目:黑龙江大学青年科学基金项目(QL200627)1 前 言二维码是条码的一种。

条码是由一组按一定编码规则排列的条、空符号,用以表示一定的字符、数字及符号组成的信息。

一维条形码简称一维码,它是根据一组水平方向的条的宽度不同,从而将其编成由“0”、“1”组成的一系列字符,该二进制字符按照一定的系统约定进行编码。

在水平和垂直方向的二维空间存储信息的条形码,称为二维条形码(2-di m ensi onal bar code ),简称二维码。

从它的编码原理而言,通常可分为以下两种类型:行排式二维条码和矩阵式二维码。

行排式二维条码具有代表性的矩阵式二维条码有Code 16K 、Code 49、P DF417等。

矩阵式二维码具有代表性的矩阵式二维条码有:Code One 、Maxi Code 、QR Code 、Data Matrix 等。

在本文中采用的是QR Code 码。

QR Code 码(Quick Res ponse Code )是日本Dens o 公司在1994年9月研制的一种矩阵二维条码,它除了具有一维条码及其他二维条码所具有的信息容量大、可靠性高以外,还具有超高速识度、全方位识读、可表示汉字,并且有很强的保密防伪性等优点。

2 研究背景介绍二维码的应用随着网络技术的发展也越来越广泛了,二维码可以和现在流行B /S 结构结合起来,让二维码在网络中起到一定的作用。

如电子票务系统的开发,可以采用二维码。

具体开发过程如下:通过现在流行的网络技术,将客户与服务商有效的联系在一个平台上,同时在票务流程中添加一个二维码的生成接口,这样可以将大量的票务信息生成二维码图片,由于二维码的存储信息容量非常大,可以为以后添加大的信息量提供了技术保障。

通过平台上生成二维码的算法,生成相应信息的二维码,同时再通过手机的W ap 技术,将平台上生成的二维码发送到手机中,从而完成了生成“电影票”的过程,这样用户就可带着自己的手机到电影院,在电影院一端可持小型高速二维码识读器,将手机中的条码识读出来,即可看到所订的电影票的信息。

这样,在整个售票的流程中不用打印任何票据,从而实现了真正意义上的电子票务。

在这个设计中生成二维码的部分是核心,如何在网络中生成二维码图片,并能使生成的二维码图片占用存储空间尽量小是最重要。

因为如果二维码图片体积过大则不利于保存,同时大的图片格式下载起来速度会相应的下降,不利于业务系统的客户端显示,因此设计一种适合网络传输与显示的网络二维码图片生成算法对二维码应用领域具有重要意义。

3 网络二维码图片在线生成算法311 二维码生成组件介绍涉及的二维码信息编码模块直接采用目前通用的二维码信息编码组件QREncode .dll,该组件可以根据编码选项对输入的字符串进行QR Code 编码,得到编码后的QR 符号,具体调用方法如下:调用接口定义:ST DMETHOD I M P CQREncoder:Encode (BST R bstrEncode Data,BYTE byErr or Correcti on Level,BOOL b I S O I 2EC,BSTR 3pbstr ResultStrea m )输入参数说明:BSTR bstrEncode Data:待编码的字符串,注意一个中文字符对应两个字节,对应汉字内码BYTE byErr or Correcti onLevel:编码的纠错级别选择,0表示纠错级别L (7%),1表示纠错级别M (15%),2表示纠错级别Q (25%),3表示纠错级别H (30%)BOOL b I S O I EC:采用的编码标准,取值为TRUE 表示采用国际标准(I S O /I EC 18004),F ALSE 表示采用国家标准(G B /T G B /T 18284-2000)输出参数说明:BSTR 3pbstr ResultStrea m:输出字符串,字符串由三部分组成,第一部分三字节,为编码后QR 符号的宽度,第二部分三字节,为编码后QR 符号的高度,第三部分为编码后的QR 符号,长度为QR 符号宽度与QR 符号高度的乘积。

对字符串“01234567”编码后得到返回值为:“021021111111101101101111111100000101010001000001101110100110101011101101110101100001011101101110100110001011101100000100110001000001111111101010101111111000000001100000000000101101110010001001011000101011010100101100100101111000111110010110100010010110001010000111111001010010000000000001110010100001111111101000011010110100000101011111000101101110100101001000001101110101010010010110101110101011010010100100000100101101011011111111101001100100010”由返回值可以得出字符串“01234567”经二维码信息编码后应理解为21个单位宽、21个单位高的正方形单位矩阵,可以根据矩阵中的每一个元素值(0或1)来生成二维码图片对应位置上的像素颜色,如果定义0值为白色,1值为黑色,每个单位对应1个像素,那么当前二维码图片应为21像素宽、21像素高的黑白相间的图片。

312 图片格式筛选现将《网络二维码图片的生成算法研究》这个题目的信息生成一张二维码的图片,如图2所示。

然后用不同的格式去保存这张图片,比较它们的大小。

如表1所示,通过上面数据的比较,可以得出一个结论,在信息完全相同的情况下,单色BMP 格式是最小的,因为它的图像中只有黑白两种像素的图像,这正是本文要选择的格式。

313 在线生成二维码图片算法在本文中如何生成二维码的图片是一个很重要的问题,根据上面的对比,可采用BMP 格式,主要的核心・712・第2期康春颖:网络二维码图片的生成算法研究代码如下:B t oD 函数用于将二进制数转为十进制数p rivate functi on B t oD (bcode ) di m i,a a =0 for i =7t o 0step -1 a =a +cint (m id (bcode,8-i,1))3(2^i ) next B t o D =aend functi onFHE AD 函数可返回BMP 文件的二进制文件头p rivate functi on FHE AD (datasize,t w ,th )输出BMP 文件头[文件头信息块与图像描述信息块与颜色表],共62个字节各字节的信息依次含义为:文件头信息块大小,图像描述信息块的大小,图像颜色表的大小,保留(为01)文件头信息块0000-0001:文件标识,为字母ASC II 码“BM ”。

0002-0005:文件大小。

0006-0009:保留,每字节以“00”填写。

000A -000D:记录图像数据区的起始位置。

图像描述信息块000E -0011:图像描述信息块的大小,常为28H 。

0012-0015:图像宽度。

0016-0019:图像高度。

001A -001B:图像的p lane 总数(恒为1)。

001C -001D:记录像素的位数,很重要的数值,图像的颜色数由该值决定。

001E -0021:数据压缩方式(数值位0:不压缩;1:8位压缩;2:4位压缩)。

0022-0025:图像区数据的大小。

0026-0029:水平每米有多少像素,在设备无关位图(.D I B )中,每字节以00H 填写。

002A -002D:垂直每米有多少像素,在设备无关位图(.D I B )中,每字节以00H 填写。

002E -0031:此图像所用的颜色数,如值为0,表示所有颜色一样重要。

颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节。

其中,每4字节表示一种颜色,并以B (蓝色)、G (绿色)、R (红色)、al pha (32位位图的透明度值,一般不需要)。

即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。

FHE AD =Chr B (66)&Chr B (77)&DWORD (datasize +&h3e )&Chr B (0)&Chr B (0)&-Chr B (0)&Chr B (0)&Chr B (&H3e )&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (&H28)&Chr B (0)&-Chr B (0)&Chr B (0)&DWORD (t w )&DWORD (th )&Chr B (1)&Chr B (0)&Chr B (1)&Chr B (0)&Chr B (0)&-Chr B (0)&Chr B (0)&Chr B (0)&DWORD (datasize )&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&Chr B (0)&-chr B (&hff )&chr B (&hff )&chr B (&hff )&chrb (0)end functi on生成图片,其中bmp -LBW idth 为四周留白的宽度,b mp -width 为编码图片的宽度,bmp -height 为编码图片的高度,b mp -b width 为单位信息点的像素宽度,bmp -A 为存放二维码编码组件生成的信息点编码数组Public Sub dra w () Res ponse .Exp ires =-9999 Res ponse .AddHeader "Prag ma","no -cache"・812・黑 龙 江 大 学 自 然 科 学 学 报 第26卷  Res ponse .AddHeader "cache -ctr ol","no -cache" Res ponse .ContentType ="I m age /BMP" Res ponse .B inary W rite FHEAD (b mp -datasize,(bmp -width +b mp -LBW idth 32)3b mp -bwidth,(b mp -height +bmp -LBW idth 32)3bmp -bwidth ) 输出图像数据(从下至上,从左至右) for i =ubound (b mp -A ,1)-1t o 0step -1 for j =0t o ubound (bmp -A,2)-1step 8 res ponse .B inary W rite chrb (B t oD (bmp -A (i,j )&b mp -A (i,j +1)&bmp -A (i,j +2)&bmp -A (i,j +3)&b mp -A (i,j +4)&b mp -A (i,j +5)&bmp -A (i,j +6)&b mp -A (i,j +7))) next nextEnd Sub4 小 结二维码是一种具有大容量、可靠性高、防伪度强等特点的条形码,本文提供的二维码BMP 格式生成算法,具有生成速度快、图片体积小等特点,同时该算法所生成的二维码图片,不但可以在各类网络浏览器中正常显示,还支持用户在终端对生成的二维码图片下载保存与在线打印。

相关主题