微信开发 -- 二维码生成

微信开发 – 二维码生成

生成二维码无非就是将一段字符串内容以某种特定的方式进行编码, 最终得到一个图片。 这里使用 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~~~

生成的二维码:

二维码生成Sample~~~@

源码将会在评论中给出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值