1、添加 ThoughtWorks.QRCode.dll 引用
2、代碼
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; using System.Drawing; using System.Text; using ThoughtWorks.QRCode.Codec; using System.IO; namespace App.Web.APIControllers { /// <summary> /// 生成二維碼 /// </summary> public class QRCodeController : Controller { /// <summary> /// 生成二維碼 /// </summary> /// <param name="enCodeString">要生成二維碼的文字</param> /// <returns></returns> [HttpGet] [AllowAnonymous] public string QRCode(string enCodeString) { System.Drawing.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 codeUrl; } /// <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> [HttpGet] [AllowAnonymous] 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(); } } } }
兩種方法實際是一種方法。