zoukankan      html  css  js  c++  java
  • 二维码生成与解码

    有三种方式:

    1、ZXing.Net

    实例源码:

            protected void Page_Load(object sender, EventArgs e)
            {
                DateTime dtBegin = DateTime.Now;
    
                string fileName = AppDomain.CurrentDomain.BaseDirectory + "bin\" + Guid.NewGuid().ToString() + ".jpg";
                string content = HttpUtility.UrlDecode(this.Request["content"]);
                BarcodeWriter writer = new BarcodeWriter() 
                    { 
                        Format = BarcodeFormat.QR_CODE, 
                        Options = new EncodingOptions() 
                            { 
                                Width = 300, 
                                Height = 400 
                            },
                        Renderer = (IBarcodeRenderer<Bitmap>)Activator.CreateInstance(typeof(BitmapRenderer))
                    };
                Bitmap bmp = writer.Write(content);
                bmp.Save(fileName);
                this.Response.WriteFile(fileName);
    
                string time = (DateTime.Now - dtBegin).TotalMilliseconds.ToString();
            }
    View Code

    2、QrCode.Net

    实例源码:

            protected void Page_Load(object sender, EventArgs e)
            {
                DateTime dtBegin = DateTime.Now;
    
                string fileName = AppDomain.CurrentDomain.BaseDirectory + "bin\" + Guid.NewGuid().ToString() + ".jpg";
                string content = HttpUtility.UrlDecode(Request.QueryString["content"]);
                QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M);
                QrCode qrCode = qrEncoder.Encode(content);
    
                GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Two), Brushes.Black, Brushes.White);
                using (FileStream stream = new FileStream(fileName, FileMode.Create))
                {
                    renderer.WriteToStream(qrCode.Matrix, ImageFormat.Png, stream);
                }
                this.Response.WriteFile(fileName);
    
                string spendTime = (DateTime.Now - dtBegin).TotalMilliseconds.ToString();
            }
    View Code

    3、ThoughtWorks.QRCode

    实例源码:

            protected void Page_Load(object sender, EventArgs e)
            {
                DateTime dtBegin = DateTime.Now;
    
                string content = HttpUtility.UrlDecode(Request.QueryString["content"]);
                Bitmap bitmap = CreateQRCode(content);
                string fileName = AppDomain.CurrentDomain.BaseDirectory + "bin\" + Guid.NewGuid().ToString() + ".jpg";
                
                bitmap.Save(fileName, ImageFormat.Jpeg);            
                Response.WriteFile(fileName,true);
    
                string spendTime = (DateTime.Now - dtBegin).TotalMilliseconds.ToString();
            }
    
            public Bitmap CreateQRCode(string content)
            {
                QRCodeEncoder qrEncoder = new QRCodeEncoder();
                qrEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrEncoder.QRCodeScale = 4; //Convert.ToInt32(txtSize.Text);
                qrEncoder.QRCodeVersion = 7;// Convert.ToInt32(cboVersion.SelectedValue);
                qrEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                try
                {
                    Bitmap qrcode = qrEncoder.Encode(content, Encoding.UTF8);
                    return qrcode;
                }
                catch (IndexOutOfRangeException ex)
                {
                    //超出当前二维码版本的容量上限,请选择更高的二维码版本
                    return new Bitmap(100, 100);
                }
                catch (Exception ex)
                {
                    //生成二维码出错
                    return new Bitmap(100, 100);
                }
            }
    View Code

    注意事项:

    1、web端请求二维码的一种方式是将生成二维码的服务页面赋给<img>的src属性。

    2、三种方式均为开源项目,使用时到官网下载源码,并添加到项目中即可

    3、三种方式对比:3的处理速度最快,在web端访问的处理时间大概20ms,1和2的速度达不多,为50ms到70ms左右,但1和2dll较小,几百k,而3为6M

    4、方式3的demo运行时有问题,原因待查

  • 相关阅读:
    mysql索引
    mysql锁机制
    mysql授权
    mysql执行计划
    mysql知识补遗
    求助:springboot调用存储过程并使用了pagehelper分页时报错com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
    java面试题1
    Yarn
    MapRudecer
    Hive数据倾斜和解决办法
  • 原文地址:https://www.cnblogs.com/MattCheng/p/4613520.html
Copyright © 2011-2022 走看看