微信开发 -- 二维码生成

微信开发 -- 二维码生成

微信开发 – 二维码生成

生成二维码无非就是将一段字符串内容以某种特定的方式进行编码, 最终得到一个图片。 这里使用 C# 生成二维码我用到了 QrCode.Net 这个 Nuget 包。

这里我们创建一个名为 QrCodeGenerate 的 Web 程序, 创建一个 QrCodeUtils 的工具类库,在 Nuget 包管理控制台中键入:

Install-Package QrCode.Net

安装好 QrCode.Net 包之后,创建一个 QrCodeUtil.cs 工具类, 添加静态方法

/// <summary>/// 生成二维码/// </summary>/// <param name="strContent">待编码内容</param>/// <param name="errorCorrect">错误校正等级</param>/// <param name="ms">内存流</param>/// <param name="moduleSize">单元尺寸</param>/// <param name="quietZones">空白区域</param>/// <returns>是否创建成功</returns>public static bool Create(string strContent, string errorCorrect, MemoryStream ms, int moduleSize = 12, QuietZoneModules quietZones = QuietZoneModules.Two){    var encoder = new QrEncoder();    encoder.ErrorCorrectionLevel = errorCorrect == "L" ? ErrorCorrectionLevel.L :        errorCorrect == "M" ? ErrorCorrectionLevel.M :        errorCorrect == "Q" ? ErrorCorrectionLevel.Q : ErrorCorrectionLevel.H;    QrCode qr;    //对内容进行编码,并保存生成的矩阵 Matrix    if (encoder.TryEncode(strContent, out qr))      {        var render = new GraphicsRenderer(new FixedModuleSize(moduleSize, quietZones));        render.WriteToStream(qr.Matrix, ImageFormat.Png, ms);        return true;    }    else    {        return false;    }}

然后在我们的 Web 应用程序中添加 QrCodeController , 针对于 GET 方式和 POST 方式分别创建生成二维码的 Action 为:

/// <summary>/// 生成二维码(支持中文)/// </summary>/// <param name="strContent">待编码内容</param>/// <returns></returns>[HttpGet]public ActionResult GenerateByGet(string strContent){    try    {        using (var memoryStream = new MemoryStream())         {            string errorCorrect = "L";            QrCodeGenerater.Create(strContent, errorCorrect, memoryStream);            return File(memoryStream.GetBuffer(), "image/jpeg");        }    }    catch (Exception)    {        return null;    }}/// <summary>/// 生成二维码(支持中文)/// </summary>/// <param name="strContent">待编码内容</param>/// <returns></returns>[HttpPost]public ActionResult GenerateByPost(string strContent){    try    {        using (var memoryStream = new MemoryStream())        {            string errorCorrect = "L";            QrCodeGenerater.Create(strContent, errorCorrect, memoryStream);            return File(memoryStream.GetBuffer(), "image/jpeg");        }    }    catch (Exception)    {        return null;    }}

作用都是一样, 都是生成二维码, 参数便是需要进行编码的内容, 这里我对路由做了一点点调整

public static void RegisterRoutes(RouteCollection routes){    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");    routes.MapRoute(        name: "Default",        url: "{controller}/{action}/{strContent}",        defaults: new { controller = "QrCode", action = "GenerateByGet", strContent = "二维码生成" }    );}

启动项目测试:

输入路由路由地址(支持中文): http://localhost:40800/QrCode/GenerateByGet/二维码生成Sample~~~

生成的二维码:

源码将会在评论中给出

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部