1、添加 ThoughtWorks.QRCode.dll 引用
2、代码
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Threading.Tasks; 5using Microsoft.AspNetCore.Authorization; 6using Microsoft.AspNetCore.Cors; 7using Microsoft.AspNetCore.Mvc; 8using System.Drawing; 9using System.Text; 10using ThoughtWorks.QRCode.Codec; 11using System.IO; 12 13namespace App.Web.APIControllers 14{ 15 /// <summary> 16 /// 生成二维码 17 /// </summary> public class QRCodeController : Controller 18 { 19 /// <summary> 20 /// 生成二维码 21 /// </summary> 22 /// <param name="enCodeString">要生成二维码的文字</param> 23 /// <returns></returns> 24 [HttpGet] 25 [AllowAnonymous] 26 public string QRCode(string enCodeString) 27 { 28 System.Drawing.Bitmap bt; 29 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); 30 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字) 31 qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高) 32 qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误) 33 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级) 34 qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色 35 qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色 36 bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); 37 string filename = enCodeString;// "code"; 38 string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\"; 39 string codeUrl = file_path + filename + ".jpg"; 40 41 //根据文件名称,自动建立对应目录 42 if (!System.IO.Directory.Exists(file_path)) 43 { 44 System.IO.Directory.CreateDirectory(file_path); 45 } 46 ////防止内容重复,导致名称重复问题, 47 ////若要每次更新,可去掉本段代码 ↓↓↓↓↓ 48 //int i = 1; 49 //while (System.IO.File.Exists(codeUrl)) 50 //{ 51 // string _filename = filename + "("+i+")"; 52 // codeUrl = file_path + _filename + ".jpg"; 53 // i++; 54 //} 55 //// ↑↑↑↑↑↑↑ 56 57 bt.Save(codeUrl);//保存图片 58 return codeUrl; 59 } 60 61 62 /// <summary> 63 /// 生成二维码【方法二】 64 /// </summary> 65 /// <param name="qrCodeScale">尺寸4-15</param> 66 /// <param name="qrCodeVersion">复杂级别3-12</param> 67 /// <param name="qrCodeErrorCorrect">容错量"H","L","M","Q"</param> 68 /// <param name="enCodeString">二维码信息</param> 69 /// <returns></returns> 70 [HttpGet] 71 [AllowAnonymous] 72 public string CreateEQcoder(int qrCodeScale, int qrCodeVersion, string qrCodeErrorCorrect, string enCodeString) 73 { 74 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); 75 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; 76 qrCodeEncoder.QRCodeScale = qrCodeScale; 77 qrCodeEncoder.QRCodeVersion = qrCodeVersion; 78 switch (qrCodeErrorCorrect) 79 { 80 case "H": 81 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; 82 break; 83 case "L": 84 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; 85 break; 86 case "M": 87 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; 88 break; 89 case "Q": 90 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q; 91 break; 92 } 93 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; 94 Bitmap bmPhoto = qrCodeEncoder.Encode(enCodeString, System.Text.Encoding.GetEncoding("UTF-8")); 95 string fileName = enCodeString+"_"+ qrCodeScale+"_"+qrCodeVersion+"_"+ qrCodeErrorCorrect; 96 string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\"; 97 string savePath = file_path + fileName + ".jpg"; 98 try 99 { 100 if (!Directory.Exists(file_path)) 101 { 102 Directory.CreateDirectory(file_path); 103 } 104 105 //防止内容重复,导致名称重复问题,若要每次更新,可去掉本段代码 ↓↓↓↓↓ 106 int i = 1; 107 while (System.IO.File.Exists(savePath)) 108 { 109 string _filename = fileName + "(" + i + ")"; 110 savePath = file_path + _filename + ".jpg"; 111 i++; 112 } 113 //↑↑↑↑↑↑↑ 114 bmPhoto.Save(savePath); 115 bmPhoto.Dispose(); 116 return savePath ; 117 } 118 catch (Exception) 119 { 120 return ""; 121 } 122 finally 123 { 124 bmPhoto.Dispose(); 125 } 126 } 127 } 128}
两种方法实际是一种方法。