二维码生成
2018-06-22 07:45:46来源:未知 阅读 ()
最近项目遇到要生成二维码,来分享系统链接给其他用户,便查找这方面的资料,做一点读书笔记:
主要工作是用ThoughtWorks.QRCode.dll来实现的,ThoughtWorks.QRCode功能很强大,使用起来也很方便,
下面是二维码原理的一个详细说明,我看了下,没有太难理解的算法,但涉及到的计算太多了,有兴趣的朋友,可以研究下
http://developer.51cto.com/art/201310/414082_all.htm
要生成二维码,最主要是使用类QRCodeEncoder,命名空间:ThoughtWorks.QRCode.Codec
类的主要属性:
public virtual Color QRCodeBackgroundColor { get; set; } //二维码背景颜色,默认为白色
public virtual ENCODE_MODE QRCodeEncodeMode { get; set; }//默认为ENCODE_MODE.BYTE
public virtual ERROR_CORRECTION QRCodeErrorCorrect { get; set; }//默认为ERROR_CORRECTION.M
public virtual Color QRCodeForegroundColor { get; set; }//二维码码色,默认为黑色
public virtual int QRCodeScale { get; set; }//放大比例,二维码中,最小黑块的大小,默认为4
public virtual int QRCodeVersion { get; set; }//二维码版本,默认为7,取值范围0~40(包含0和40)(这个我觉得叫二维码大小更口语化些,二维码含有的信息量大小,由此属性决定,如果内容过长,会抛出数组越界的异常)
定义了两个枚举:
public enum ENCODE_MODE //编码模式(我自己的理解,以下类同) { ALPHA_NUMERIC, NUMERIC, BYTE } public enum ERROR_CORRECTION //(误差校正级别) { L, M, Q, H }
最主要的两个方法:
BiteMap Encode(string content);
BiteMap Encode(string content, Encoding encoding);
传入二维码的内容字符串,及编码方法。
系统默认下会判断传入的content参数,如果传入的content属于Unicode字符,则系统默认采用Unicode编码,否则采用ASCII编码。
网上有说是支持中文的,但我测试,默认情况下是不支持中文的,不知道是不是我的类库有问题,如果要支持中文,请请主动传递编码方式参数(utf8)。
public virtual void setStructureappend(int m, int n, int p)
//0<=N<=16&& 0<=M<=16 && 0<=P<=255时才有用,这个方法具体有什么用,我也没弄明白,有知道的朋友请指点下
为了使用起来更方便点,我对这个类做了个简单的封装,主要修改了默认的编码为UTF8,修改可以根据传入的内容字节数自动判定QRCodeVersion ,修改了编码后返回类型为二维码图像的base64字符串:
1 public ErWeiMa() 2 { 3 _QRCode = new QRCodeEncoder(); 4 _QRCode.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; 5 _QRCode.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; 6 _QRCode.QRCodeScale = 4; 7 8 encoding = Encoding.UTF8; 9 } 10 11 12 /// <summary> 13 /// 获取二维码图像base64字符串,可直接赋值给img对象的src显示 14 /// 默认编码UTF8,QRCodeEncoder默认值为Unicode 15 /// </summary> 16 /// <param name="content">编码内容</param> 17 /// <returns>二维码图像base64字符串</returns> 18 public string Encode(string content) 19 { 20 this.InitVersion(content); 21 using(var ms = new MemoryStream()) 22 using (Bitmap image = _QRCode.Encode(content, encoding)) 23 { 24 image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 25 return "data:image/jpeg;base64,"+ Convert.ToBase64String(ms.ToArray()); 26 } 27 } 28 /// <summary> 29 /// 获取二维码图像base64字符串,可直接赋值给img对象的src显示 30 /// </summary> 31 /// <param name="content">编码内容</param> 32 /// <param name="encoding">编码类型</param> 33 /// <returns>二维码图像base64字符串</returns> 34 public string Encode(string content,Encoding encoding) 35 { 36 this.encoding = encoding; 37 this.InitVersion(content); 38 using (var ms = new MemoryStream()) 39 using (Bitmap image = _QRCode.Encode(content, encoding)) 40 { 41 image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 42 return "data:image/jpeg;base64," + Convert.ToBase64String(ms.ToArray()); 43 } 44 }
使用方法:
1 ErWeiMa.ErWeiMa er = new ErWeiMa.ErWeiMa(); 2 this.img1.Src = er.Encode("中国");
详细代码:
http://pan.baidu.com/s/1nvCwlfj
ThoughtWorks.QRCode.dll:
http://pan.baidu.com/s/1c2zNrMS
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- .NET随机数函数的生成方法 2020-03-18
- ASP.NET编程简单实现生成静态页面的方法 2020-02-06
- MVC生成页码选择器返回HTML代码详解 2020-02-06
- asp.net实现生成静态页并添加链接的方法 2019-12-15
- 总结ASP.NET生成二维码的方法 2019-11-21
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash