• C# 生成二维码


     一.ThoughtWorks

    使用ThoughtWorks实现生成二维码操作步骤:

    第一步:VS 通过Nuget安装ThoughtWorks,略

    第二步:新增类库,实现生成二维码函数,如下所示:

         /// <summary>
            /// 使用ThoughtWorks生成二维码图片
            /// </summary>
            /// <param name="imgPath">图片路径</param>
            /// <param name="codeContent">内容信息</param>
            /// <returns></returns>
            public string NewQRCodeByThoughtWorks(string imgPath, string codeContent, ImageFormat imgType)
            {
                QRCodeEncoder encoder = new QRCodeEncoder();
                encoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
                encoder.QRCodeScale = 4;//大小(值越大生成的二维码图片像素越高)
                encoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
                encoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
                encoder.QRCodeBackgroundColor = Color.Yellow;
                encoder.QRCodeForegroundColor = Color.Green;
    
                Bitmap bcodeBitmap = encoder.Encode(codeContent);
                bcodeBitmap.Save(imgPath, imgType);//@"E:	est.png"      ImageFormat.Png
                bcodeBitmap.Dispose();
                return imgPath;
            }

     注意:

    如果在使用Nuget安装库文件,出现版本不兼容,提示升级Nuget时,处理方式:

    方式一:

    单击所需要安装的库文件的ID,出现如下图所示信息

    单击复诊图标

    VS中工具==》库程序包管理器==》程序包管理器控制台==》将复制的信息粘贴到 控制台==》Enter回车==》开始下载安装所需要版本的库文件==》安装 引用成功 哦也

    方式二:使用高版本的VS

    二.Zxing.Net

    第一步:使用Nuget安装 略

    第二步:实现

            /// <summary>
            /// 使用ZxingNet生成二维码图片
            /// </summary>
            /// <param name="imgPath">图片路径</param>
            /// <param name="codeContent">内容信息</param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <param name="imgType">ImageFormat imgType</param>
            /// <param name="BarcodeFormat barcodeFormat">barcodeFormat</param>
            /// <returns></returns>
            public string NewQRCodeByZxingNet(string imgPath, string codeContent, int width, int height,
                ImageFormat imgType, BarcodeFormat barcodeFormat)
            {
                // 1.设置QR二维码的规格
                QrCodeEncodingOptions code = new QrCodeEncodingOptions();
                code.CharacterSet = "UTF-8"; // 设置编码格式,否则读取'中文'乱码
                code.Height = height;
                code.Width = width;
                code.Margin = 1; // 设置周围空白边距
    
                // 2.生成条形码图片并保存
                BarcodeWriter wr = new BarcodeWriter();
                wr.Format = barcodeFormat; // 二维码 BarcodeFormat.QR_CODE
                wr.Options = code;
                Bitmap img = wr.Write(codeContent);
                img.Save(imgPath, imgType);
    
                return imgPath;
            }
    
            /// <summary>
            /// ZXing根据图片读取二维码内容
            /// </summary>
            /// <param name="img">Image img</param>
            /// <param name="BarcodeFormat barcodeFormat">barcodeFormat</param>
            /// <returns></returns>
            public string ReadQrCode(Image img, BarcodeFormat barcodeFormat)
            {
                // 1.设置读取条形码规格
                DecodingOptions decodeOption = new DecodingOptions();
                decodeOption.PossibleFormats = new List<BarcodeFormat>() { barcodeFormat };
    
                // 2.进行读取操作
                ZXing.BarcodeReader br = new BarcodeReader();
                br.Options = decodeOption;
                ZXing.Result rs = br.Decode(img as Bitmap);
                if (rs == null) return string.Empty;
                else return rs.Text;
            }
    
    
            /// <summary>
            /// 使用ZxingNet生成二维码图片 二维码带有校验功能,故可以在中间区域展示一定尺寸的图片
            /// </summary>
            /// <param name="logoImg">logo图片路径</param>
            /// <param name="imgPath">二维码图片路径</param>
            /// <param name="codeContent"></param>
            /// <param name="width"></param>
            /// <param name="height"></param>
            /// <param name="imgType">ImageFormat imgType</param>
            /// <param name="BarcodeFormat barcodeFormat">barcodeFormat</param>
            /// <returns></returns>
            public string NewQrCodeAndImgByZxingNet(string logoImg, string imgPath, string codeContent,
                int width, int height, ImageFormat imgType, BarcodeFormat barcodeFormat)
            {
                // 1.设置QR二维码的规格
                QrCodeEncodingOptions qrEncodeOption = new QrCodeEncodingOptions();
                qrEncodeOption.CharacterSet = "UTF-8"; // 设置编码格式,否则读取'中文'乱码
                qrEncodeOption.Height = height;
                qrEncodeOption.Width = width;
                qrEncodeOption.Margin = 1; // 设置周围空白边距
    
                // 2.生成条形码图片
                BarcodeWriter wr = new BarcodeWriter();
                wr.Format = barcodeFormat; // 二维码 BarcodeFormat.QR_CODE
                wr.Options = qrEncodeOption;
                Bitmap img = wr.Write(codeContent);
    
                // 3.在二维码的Bitmap对象上绘制logo图片
                Bitmap logo = Bitmap.FromFile(logoImg) as Bitmap;
                Graphics g = Graphics.FromImage(img);
                Rectangle logoRec = new Rectangle(); // 设置logo图片的大小和绘制位置
                logoRec.Width = img.Width / 6;
                logoRec.Height = img.Height / 6;
                logoRec.X = img.Width / 2 - logoRec.Width / 2; // 中心点
                logoRec.Y = img.Height / 2 - logoRec.Height / 2;
                g.DrawImage(logo, logoRec);
    
                // 4.保存绘制后的图片
                img.Save(imgPath, imgType);
                return imgPath;
            }

     实例效果,代码略

  • 相关阅读:
    如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
    如何向外行解释什么是内存溢出
    【转】21副GIF动图让你了解各种数学概念
    C++buider IDE补丁
    c++buider2010 中.dfm无法打开设计界面的解决方法
    【转】Eclipse 常用快捷键 (动画讲解)
    修身养性,打磨自己
    毕向东java基础课学习笔记5——类型转换
    毕向东java基础课学习笔记——DOS中多命令来回切换的技巧
    vb 本机与SQL远程服务器时间同步
  • 原文地址:https://www.cnblogs.com/YYkun/p/10307185.html
Copyright © 2020-2023  润新知