zoukankan      html  css  js  c++  java
  • C# 生成二维码

     1、添加 ThoughtWorks.QRCode.dll 引用

     2、代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Cors;
    using Microsoft.AspNetCore.Mvc;
    using System.Drawing;
    using System.Text;
    using ThoughtWorks.QRCode.Codec;
    using System.IO;
    
    namespace App.Web.APIControllers
    {
        /// <summary>
        /// 生成二维码
        /// </summary>    public class QRCodeController : Controller
        {
            /// <summary>
            /// 生成二维码
            /// </summary>
            /// <param name="enCodeString">要生成二维码的文字</param>
            /// <returns></returns>
            [HttpGet]
            [AllowAnonymous]
            public string QRCode(string enCodeString)
            {
                System.Drawing.Bitmap bt;
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
                qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高)
                qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
                qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色
                qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色
                bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
                string filename = enCodeString;// "code";
                string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\";
                string codeUrl = file_path + filename + ".jpg";
    
                //根据文件名称,自动建立对应目录
                if (!System.IO.Directory.Exists(file_path))
                {
                    System.IO.Directory.CreateDirectory(file_path);
                }
                ////防止内容重复,导致名称重复问题,
                ////若要每次更新,可去掉本段代码 ↓↓↓↓↓
                //int i = 1;
                //while (System.IO.File.Exists(codeUrl))
                //{               
                //    string _filename = filename + "("+i+")";
                //    codeUrl = file_path + _filename + ".jpg";
                //    i++;
                //}
                ////   ↑↑↑↑↑↑↑
    
                bt.Save(codeUrl);//保存图片
                return codeUrl;
            }
    
    
            /// <summary>
            /// 生成二维码【方法二/// </summary>
            /// <param name="qrCodeScale">尺寸4-15</param>
            /// <param name="qrCodeVersion">复杂级别3-12</param>
            /// <param name="qrCodeErrorCorrect">容错量"H","L","M","Q"</param>
            /// <param name="enCodeString">二维码信息</param>        
            /// <returns></returns>
            [HttpGet]
            [AllowAnonymous]
            public  string CreateEQcoder(int qrCodeScale, int qrCodeVersion, string qrCodeErrorCorrect, string enCodeString)
            {
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrCodeEncoder.QRCodeScale = qrCodeScale;
                qrCodeEncoder.QRCodeVersion = qrCodeVersion;
                switch (qrCodeErrorCorrect)
                {
                    case "H":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
                        break;
                    case "L":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
                        break;
                    case "M":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                        break;
                    case "Q":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
                        break;
                }
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
                Bitmap bmPhoto = qrCodeEncoder.Encode(enCodeString, System.Text.Encoding.GetEncoding("UTF-8"));
                string fileName = enCodeString+"_"+ qrCodeScale+"_"+qrCodeVersion+"_"+ qrCodeErrorCorrect;
                string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\";
                string savePath = file_path + fileName + ".jpg";
                try
                {
                    if (!Directory.Exists(file_path))
                    {
                        Directory.CreateDirectory(file_path);
                    }
    
                    //防止内容重复,导致名称重复问题,若要每次更新,可去掉本段代码 ↓↓↓↓↓
                    int i = 1;
                    while (System.IO.File.Exists(savePath))
                    {
                        string _filename = fileName + "(" + i + ")";
                        savePath = file_path + _filename + ".jpg";
                        i++;
                    }
                    //↑↑↑↑↑↑↑
                    bmPhoto.Save(savePath);
                    bmPhoto.Dispose();
                    return savePath ;
                }
                catch (Exception)
                {
                    return "";
                }
                finally
                {
                    bmPhoto.Dispose();
                }
            }
        }
    }

     两种方法实际是一种方法。

  • 相关阅读:
    STM32F030 启用内部晶振并配置系统时钟为48M
    CSS 动画过程及间接实现样式延时
    Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data
    21 GetHashCode Equels ReferenceEquals的比较
    3 Base64编码主要应用在那些场合?
    2 什么是编码?什么是Unicode?
    2 名企面试_02
    ListView
    Image
    Container
  • 原文地址:https://www.cnblogs.com/dyhao/p/11595714.html
Copyright © 2011-2022 走看看