主办单位:中国物品编码中心 | 中国自动识别技术协会 | 《中国自动识别技术》杂志社

设为首页 | 加入收藏 | 关于我们

  二维码  正文

基于.net QRCoder实现的二维码

发布时间:2019年11月19日 来源:中国自动识别网 作者:涂辉

随着信息化的发展及智能移动终端的普及,人们对于信息的承载、传播、访问的便捷性、快速性等需求进一步提高,二维码是一种二维的条码,相比于一维条码只在水平方向上存储有限信息,二维码因为具有字符容量大、支持纠错处理、编解码速度快、信息承载量高、成本低廉、系统依赖度低等优点应运而生,其表示范围不仅包括数字、英文、汉字甚至声音、图像等信息都能承载,因此二维码在数据访问、工业生产、流程跟踪、移动支付、数据下载、电子凭证等领域广泛使用。2017年7月由中国物品编码中心牵头起草的GB/T 33993-2017《商品二维码》国家标准正式发布,标准规定了商品二维码的数据结构、信息服务和符号印制质量标准,对二维码的推广、应用、管理等提供了重要的指导作用。二维码的广泛使用为人们的日常生活提供了极大的便利,是打通国民经济线上与线下的重要渠道,因此针对二维码的研究及实现具有重要意义。
 
QR码
典型的QR码如图1所示,主要分为功能区与编码区。定位区是”回”字形黑白框,至少且只需要三个定位区即可确定一个矩形位置及其大小,并且QR码内不可能再出现与定位区相同形状的图案,同时分割区对定位区与编码区进行分离以确保定位准确,快速准确的定位是QR码能高速读取的关键。定位图形是一条单位为1个码宽的黑白间隔条带,起到标识横竖坐标系及表明二维码密度的作用。矫正区是较小的”回”字形黑白框,根据二维码码形的大小,矫正区存在数量不等,在印刷面不平整或拍照有畸变时起到矫正QR码的作用。格式信息表示QR码的纠错级别分别是L、M、Q、H,纠错能力分别是7%、15%、25%、30%。数据区使用8个黑白的二进制网格作为一个字节编码数据内容,理论上QR码的最大容量可达到7089个数字字符或4296个字母字符或2593个8位字节字符或1817个日本汉字、中国汉字字符,QR码能够编码汉字也是其在中国广泛使用的原因之一。
图1
 
编码实现
利用C#生成二维码首先要添加对QRCoder的引用,使用其中的三个类,分别是生成二维码存储对象的QRCodeGenerator类,设置二维码内容、容错信息、版本等编码格式或内容的QRCodeData类,及负责生成二维码的QRCode类。
string coders = "http://www.xzcit.edu.cn/";//需要生成二维码的内容
string filePath = @"F: \二维码\";//二维码图片保存的路径
string fileName = filePath + System.Guid.NewGuid() + ".jepg";//二维码存储图片的命名
QRCoder.QRCodeGenerator qg = new QRCoder. QRCodeGenerator();//生成二维码存储对象
QRCoder.QRCodeData qd = qg.CreateQrCode(coders,QRCoder.QRCodeGenerator.ECCLevel.Q);
//设置版本信息,这里只做最简单的二维码内容设置和容错级别
QRCoder.QRCode qrcod = new QRCoder.QRCode(qd);
Bitmap qrCodeImage = qrcod.GetGraphic(30);//像素的大小
qrCodeImage.Save(fileName, ImageFormat.Jpeg);//图像存储
以上是最简易的二维码实现方法,首先将一个网址作为二维码的内容,规定二维码生成的图片存放的路径,然后使用QRCodeGenerator创建二维码的存储对象,最后设置Q级的纠错和像素大小就可以将网址信息生成一幅二维码图像。
实际使用中GetGraphic有4个重载函数,参数最多的一个定义为public Bitmap GetGraphic(int pixelsPerModule,Color darkColor,Color lightColor,Bitmap icon = null,int iconSizePercent = 15,int iconBorderWidth = 6,bool drawQuietZones = true);可见GetGraphic函数返回的直接就是Bitmap类型在Windows系统中标准的图像文件格式,GetGraphic函数能够设置二维码的像素大小、深色域颜色、浅色域颜色、添加企业logo图片等,在设置logo时会对二维码产生一定程度的覆盖,由于有纠错码的存在,在最大H级,logo覆盖不大于30%的情况下仍然能正确识读,如果在L级,遮盖范围必须控制在7%以内。
如图2和图3是深色域设置为红色、浅色域设置为黄色的二维码,区别在于图2是H级别的纠错,图3是Q级别的纠错,从图中可见,Q级别下的二维码比H级别的图形含有更多纠错码因而码字更加密集。在logo图片大小相同情况下图2可正确识读,图1无法读取。
个性设置
在传统一维条码的基础上增加绿色与蓝色,根据颜色的顺序满足特定的算法来增加一个信息维度,从而实现每件商品ID号的确定,这种条码称之为彩虹码。在二维码中已有学者通过颜色的不同产生更多数据位的信息,在QR码中彩色码仅存在于编码区,由于编解码及扫码器可读性的限制并未广泛使用,在视觉上影响不大,只是为了扩大二维码的数据容量。受彩虹码的启发我们可以制作通过颜色突出标识的个性化二维码,来增加人们感官上的视觉效果,这种二维码也被称为视觉二维码。视觉二维码的色彩、图案、形状等表现的越丰富其视觉冲击力也越强,但不应该影响正常的识读。
如图4是将二维码中黑色像素点设置为心形图案,是对二维码前景色的改变。图5是将白色像素点设置为企业LOGO图案,改变的是二维码的背景色。图6是以个人照片为底色的二维码,需要注意的是头发颜色与前景色相近会对识读产生影响,图7是异形二维码,异形二维码仅仅是改变了二维码的外围形状,其本质与普通二维码并无差别。无论何种情况,都不应影响二维码的正常识读。
二维码是信息技术的产物,因其编码范围广、成本低、易制作、信息容量大等优点在国民经济各个领域被广泛使用,如今二维码已成为连接线上线下的关键入口。本文介绍了QR码的相关规范,介绍了定位区、矫正区和数据区。给出了一种C#实现二维码的编码方法,对二维码的前景色、背景色、LOGO覆盖与二维码纠错之间关联做了实验。并介绍了二维码的个性化设置,编码实现了对二维码的前景图案、背景图案的修改以及异形二维码的实现,二维码的视觉表现更加丰富。
在二维码广泛使用的今天,我们要清醒的认识到二维码的本质是字符串,如果这个字符串是某个链接,二维码就变成了访问入口,因其不具有肉眼可读性,不法分子会利用二维码传播病毒、木马或伪装支付的钓鱼网站。因此我们要加强警惕,在完成生活便捷性的同时,注重使用的安全性。
 
(作者单位:徐州工业职业技术学院)
《中国自动识别技术》2019年第5期总第80期
参考文献 
[1]陈炯. QRcode编解码技术的研究与实现[D].西安电子科技大学,2012.
[2]罗秋科.推进二维码开放应用  共享全球数据  实现互联互通[J].条码与信息系统,2018(05):9-15.
[3]何秋蓉,孙远明,毛宜军,古万荣,梁早清.新的柱形二维条码生成方法及应用[J].计算机应用,2018(S2):317-320.
[4]武平平,秦晓辉,于希波.二维码:O2O模式中的“高速通道”[J].条码与信息系统,2018(05):16-17.
[5]中国物品编码中心二维码技术与应用第一版北京:中国标准出版社.2001
[6]杨毅,王嘉.彩虹码的彩色从哪里来?[J].条码与信息系统,2018(05):46-47.
[7]陈元枝,邓艳,史绍亮,姜文英.基于Gzip压缩算法的彩色QR码生成与识别方法[J].电子技术应用,2015,41(12):116-119+128.
[8]赵晓琼. 基于异形二维码的商业防伪研究与实现[D].西安理工大学,2018.

延伸阅读:

声明:

    凡本网注明“来源:中国自动识别网、《中国自动识别技术》、《条码与信息系统》”的所有作品,版权均属于中国自动识别网、《中国自动识别技术》、《条码与信息系统》, 未经本网授权不得转载、摘编或利用其他方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:中国自动识别网、《中国自动识别技术》或《条码与信息系统》”。违反上述声明者,本网将追究其相关法律责任。
    凡本网注明“来源:XXX(非中国自动识别网、《中国自动识别技术》、《条码与信息系统》)”的作品,均转载自其他媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。文章内容仅供参考。 如因作品内容、版权和其他问题需要同本网联系的,请将内容传真至010-84295675,以便本网尽快处理。

高端访谈 更多>>
有效安全的数据:医疗信息...
斑马技术《2022中国医疗行业前瞻报告》显示,中国正处于临床移动信息化转型的开端,中国各地的医院正在扩大临床移动性...
安全才是企业竞合的力量
2019年OSSRA报告提供了商业应用程序中开源风险管理的状况概览。报告表明目前仍然存在重大挑战,绝大多数的应用程序包...
Imagination:在无穷想象...
Andrew Grant于2018年加入Imagination,担任高级总监,负责人工智能的战略业务发展,并构建更广泛的人工智能合作生态...
新思科技:安全而谨慎地拥...
Boris Cipot,新思科技软件质量与安全部门高级安全工程师,致力于帮助各种类型和规模的企业构建安全的软件。他擅长开...
杂志专区 更多>>

《2019第5期》

《2019第5期》