今天写一个生成二维码的小知识,也是在项目中遇到的一个问题,现在分享给大家:
我使用的是QRCoder包,在项目中右键找到管理NuGet程序包,进行下载即可;
下载完毕后开始编写代码程序:
在控制器中:
首先新建两个工具类;
public static Bitmap GetCode(string msg, int version, int pixel, string icon_path, int icon_size, int icon_border, bool white_edge){ QRCoder.QRCodeGenerator code_generator = new QRCoder.QRCodeGenerator(); QRCoder.QRCodeData code_data = code_generator.CreateQrCode(msg, QRCoder.QRCodeGenerator.ECCLevel.M/* 这里设置容错率的一个级别 */, true, true, QRCoder.QRCodeGenerator.EciMode.Utf8, version); QRCoder.QRCode code = new QRCoder.QRCode(code_data); Bitmap icon = new Bitmap(icon_path); Bitmap bmp = code.GetGraphic(pixel, Color.Black, Color.White, icon, icon_size, icon_border,white_edge); return bmp; }
//对图片进行解码(二维码背景图片) public static string ImgToBase64String(Bitmap bmp) { try { MemoryStream ms = new MemoryStream(); bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] arr = new byte[ms.Length]; ms.Position = 0; ms.Read(arr, 0, (int)ms.Length); ms.Close(); return Convert.ToBase64String(arr); } catch (Exception ex) { return null; } }
然后新建方法引用:
public ActionResult GetGeneralizeUrl() { string userName = "11"; //这里我写的是11 那么扫描二维码返回的也是11.如果需要打开一个链接,那么直接在web.config中配置一个地址即可,若需要传值则?后接 (简单的链接传值) string imgToBase64 = "data:image/png;base64," + ImgToBase64String(GetCode(userName ,7,6,WebConfigurationManager.AppSettings["icoImg"], 14, 1, false)); //WebConfigurationManager.AppSettings["icoImg"] 这是我在web.config中配置的一个本地电脑中的一个图片地址 ()用于作为背景图 return Content(imgToBase64); //返回值 }
前台中:
<button id=“GetBtn” class=“btn btn-w‑m btn-success” type=“button”>生成二维码</button>
<img id=“GeneralizeImg” src=“123” alt=“邀请二维码” />
JS中:
$("#GetBtn").click(function () { $.ajax({ url: "/CarsManage/GetGeneralizeUrl", type: "POST", success: function (data) { // console.info(data); $("#GeneralizeImg").attr("src", data); }, }); });