123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- using System;
- using System.Drawing;
- using System.Text;
- using ThoughtWorks.QRCode.Codec;
- using System.IO;
- namespace BaseLibQRCode
- {
- /// <summary>
- /// 生成二维码
- public class QRCodeController
- {
- /// <summary>
- /// 生成二维码
- /// </summary>
- /// <param name="enCodeString">要生成二维码的文字</param>
- /// <returns></returns>
- public Bitmap QRCode(string enCodeString)
- {
- Bitmap bt;
- QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
- qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
- qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高)
- qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
- qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色
- qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色
- bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
- string filename = enCodeString;// "code";
- string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\";
- string codeUrl = file_path + filename + ".jpg";
- //根据文件名称,自动建立对应目录
- if (!System.IO.Directory.Exists(file_path))
- {
- System.IO.Directory.CreateDirectory(file_path);
- }
- ////防止内容重复,导致名称重复问题,
- ////若要每次更新,可去掉本段代码 ↓↓↓↓↓
- //int i = 1;
- //while (System.IO.File.Exists(codeUrl))
- //{
- // string _filename = filename + "("+i+")";
- // codeUrl = file_path + _filename + ".jpg";
- // i++;
- //}
- //// ↑↑↑↑↑↑↑
- //bt.Save(codeUrl);//保存图片
- return bt;
- }
- /// <summary>
- /// 生成二维码【方法二】
- /// </summary>
- /// <param name="qrCodeScale">尺寸4-15</param>
- /// <param name="qrCodeVersion">复杂级别3-12</param>
- /// <param name="qrCodeErrorCorrect">容错量"H","L","M","Q"</param>
- /// <param name="enCodeString">二维码信息</param>
- /// <returns></returns>
- public string CreateEQcoder(int qrCodeScale, int qrCodeVersion, string qrCodeErrorCorrect, string enCodeString)
- {
- QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
- qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
- qrCodeEncoder.QRCodeScale = qrCodeScale;
- qrCodeEncoder.QRCodeVersion = qrCodeVersion;
- switch (qrCodeErrorCorrect)
- {
- case "H":
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
- break;
- case "L":
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
- break;
- case "M":
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
- break;
- case "Q":
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
- break;
- }
- qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
- Bitmap bmPhoto = qrCodeEncoder.Encode(enCodeString, System.Text.Encoding.GetEncoding("UTF-8"));
- string fileName = enCodeString + "_" + qrCodeScale + "_" + qrCodeVersion + "_" + qrCodeErrorCorrect;
- string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\";
- string savePath = file_path + fileName + ".jpg";
- try
- {
- if (!Directory.Exists(file_path))
- {
- Directory.CreateDirectory(file_path);
- }
- //防止内容重复,导致名称重复问题,若要每次更新,可去掉本段代码 ↓↓↓↓↓
- int i = 1;
- while (System.IO.File.Exists(savePath))
- {
- string _filename = fileName + "(" + i + ")";
- savePath = file_path + _filename + ".jpg";
- i++;
- }
- //↑↑↑↑↑↑↑
- bmPhoto.Save(savePath);
- bmPhoto.Dispose();
- return savePath;
- }
- catch (Exception)
- {
- return "";
- }
- finally
- {
- bmPhoto.Dispose();
- }
- }
- }
- }
|