.NET/C# 生成二维码

  • 大家好,在本章是如何通过.net/C#来生成二维码
  • 首先大家还是需要仔细阅读这篇文档有小细节就需要注意
  • 大家需要生成一些类,把我的方法复制进去,如果不想添加类的话,大家需要再主代码上更改引用信息找到我们所添加的方法
  • 不适用于零基础的朋友,适用于有点经验的懂一点代码的就行

1、首先我们新建一个自己的项目.net core 或其他项目新建好后新建一个控制器我们需要在里面写自己的代码,在控制器里面生成一个index页面如下是我的index页面。

 上方是我的前台页面,里面主要的就是那个按钮,我呢是通过这个按钮把我的一张图片做成了二维码的内容,大家可以把自己想变成二维码的内容弄进去,这里我只弄功能。

上面那个是二维码结构图片

2、前台页面的代码是这样的,大家肯定会和我的不一样,也没关系,只要作用是一样的就行,大致就是需要一个生成二维码的按钮和点击后弹出二维码。前台代码大家尽量别复制,大家按照自己的写就行了。

//一个按钮用来触发
<script type="text/html" id="barList">
      <a class="layui-btn  layui-btn-xs" lay-event="live">图片二维码</a>
</script>

//触发后弹出的二维码
<div class="QRCodeDownload" style="display:none;">

    <img class="QRCodeImg" id="QRCodeImg" style="display:block;width:250px;height:250px;margin:0 auto;margin-top:20px;" />
    <div id="ActivityTitle" style="text-align:center;"></div>
    <div style="display:inline-block;width:160px;margin-left:15px;"><p style="display:inline-block;">二维码尺寸为:</p><input type="number" min="200" max="2000" class="layui-input" id="slideCon1" value="250" style="width:60px;display:inline-block;"></div><div id="slide1" class="slider1" style="width:60%;display:inline-block;margin-left:10px;"></div>
    <input type="hidden" id="codeContent1" value="250">

    @*<input type="text" name="ActivityTitle" id="ActivityTitle" placeholder="" autocomplete="off" class="layui-input" style="width: 460px; margin-left: 15px">*@

    <input type="text" name="Activitylink" id="Activitylink" placeholder="" autocomplete="off" class="layui-input" style="width:460px; margin:10px auto 0;">
</div>

3、有了HTMl代码肯定也要有ajax请求的方法:主要有一下几个步骤,首先是监听一下页面是否点击了我们的二维码按钮,点击后应该请求的接口是哪个。下面是我的请求方法,大家也是不要复制,按照自己的前端代码写就行,我们主要是实现后台代码。我这个你们复制过去也不管用,所以看看逻辑就行。

//我们不管通过什么办法进行监听都可以我这里用的是表格所以我就监听表格里面的二维码按钮
case 'live':
            //我这里的这个src是二维码内容大家到时候根据自己的改就行
           var src =''
           if (data.WaysRegistration == 1) {
           src = data.ImgUrl
           } else {
               src = data.ImgUrl
           console.log(src)
               console.log(obj)
           }

           $("#Activitylink").val(src)

           $("#ActivityTitle").text('活动码-' + data.Name)
           $("#btn").attr("data-clipboard-text", src);
           showQRcode(src)

           break;


//下面这个是我们点击按钮后请求接口的方法
function showQRcode(src) {

                layer.open({
                    title: '扫码预览',
                    area: ["600px", "600px"],
                    type: 1,
                    shade: false,
                    content: $('.QRCodeDownload'),
                    success: function () {
                        var index = layer.load(1);

                        $.ajax({
                            //请求地址
                            url: UrlBase + "UserQRCode/GetQRCode",
                            type: "post",
                            dataType: "JSON",
                            data: {
                                //传过去三个参数:宽、高、内容
                                width: 250,
                                height: 250,
                                content: src
                            },
                            success: function (res) {

                                $(".QRCodeImg").attr("src", res.Result);
                                layer.close(index);
                            }
                        })

                    },
                    cancel: function (index, layero) {
                        layer.closeAll();
                        $(".QRCodeDownload").hide();
                    }
                })

            }

上面就是关于JS监听并且请求接口的方法逻辑,主要就是监听点击按钮事件、点击后弹出二维码窗口事件、展示二维码。主要分为这三种;

4、我们准备好上方的前台代码后,切记:不要复制我的前台代码只给大家提供一个逻辑思路,大家自己写前台。接下来我们就要写后台代码非常简单无脑操作。大家首先需要新建几个类因为我们接下来会引用到里面的方法。

大家直接复制就好。死操作:

第一个类:Response类

//这个类里面只需要这一个方法就行    


    /// <summary>
    /// WEBAPI通用返回泛型基类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class Response<T> : Response
    {
        /// <summary>
        /// 回传的结果
        /// </summary>
        public T Result { get; set; }
    }

第二个类:QRCodeHelper类,是我们的主要生成二维码的方法

//方法大家直接复制就好了,缺少引用就添加引用缺什么就引用什么

private static byte[] BitmapToBytes(Bitmap bitmap)
        {
   
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            byte[] bytes = ms.GetBuffer();  //byte[]   bytes=   ms.ToArray(); 这两句都可以,至于区别么,下面有解释
            ms.Close();
            return bytes;
        }

        public static string QRCodeExecute(string str, int size)
        {
            QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
            //QRCodeGenerator.ECCLevel:纠错能力,Q级:约可纠错25%的数据码字
            QRCodeData qrCodeData = qrGenerator.CreateQrCode(str, QRCodeGenerator.ECCLevel.Q);
            QRCode qrcode = new QRCode(qrCodeData);
            Bitmap qrCodeImage = qrcode.GetGraphic(8, Color.Black, Color.White, null, 15, 6, false);

            /*
            * 550为宽高
            * +60为上下左右各留出30的空白区域

            */
            Bitmap newBM = new Bitmap(size + 30, size + 30);

            //新画布
            Graphics newGP = Graphics.FromImage(newBM);
            //清除所有背景色并指定背景颜色
            newGP.Clear(Color.White);
            // 插值算法的质量
            newGP.InterpolationMode = InterpolationMode.HighQualityBicubic;

            newGP.DrawImage(qrCodeImage, new Rectangle(15, 15, size, size), new Rectangle(0, 0, qrCodeImage.Width, qrCodeImage.Height), GraphicsUnit.Pixel);

            //var bytes = BitmapToBytes(newBM);
            using var ms = new MemoryStream();
            newBM.Save(ms, ImageFormat.Jpeg);
            var bytes = ms.GetBuffer();
            newGP.Dispose();
            newBM.Dispose();
            qrGenerator.Dispose();
            var StrBase64 = "data:image/png;base64," + Convert.ToBase64String(bytes);
            return StrBase64;
            //string fileName = $"{Guid.NewGuid()}.jpg";
            //return UploadHelp.Execute(bytes, fileName, UploadFileType.QrCode, UploadFunEnum.blob);
        }

第三个类:需要引用一个返回值的类:JsonHelper

//里面只需要有这两样东西,我们只需要用到这两个所提供的返回值类型


public static JsonHelper Instance { get { return _jsonHelper; } }

        public string Serialize(object obj)
        {
            return JsonConvert.SerializeObject(obj, new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" });
        }

5、我们新建好上方的三个类之后,把方法也复制进去后,并且添加引用了,接下来操作就非常简单了,我们只需要写我们所请求的接口方法;一定要引用我们刚新创建的那三个类和别的引用。


//前面也说了,前台会给我们传过来三个参数,一个是二维码内容,一个是宽,一个是高
        [HttpPost]
        public string GetQRCode(string content, int width, int height)
        {
            Response<string> Result = new Response<string>();

            var QRCode = QRCodeHelper.QRCodeExecute(content, size: width);
            if (!string.IsNullOrEmpty(QRCode))
            {
                Result.Result = QRCode;
            }
            else
            {
                Result.Code = -100;
                Result.Message = "下载失败";
            }
            return JsonHelper.Instance.Serialize(Result);
        }

6、这就是我们本次的生成二维码的方法了,大家有哪里不懂得可以下方留言问我,前台页面大家尽量不要复制粘贴,因为我们这个文章主要是讲述的后台代码,前台代码我只给大家提供思路和逻辑,只要请求不错,监听不错,就绝对能行

切记一定要添加引用啊!!还有自己起的类的名字一定要和调用时候名字统一啊!!!!否则肯定会报错的!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值