C# 生成二维码与解析二维码

之前项目想要实现二维码生成功能,查找了一些论坛和帖子找了一些方法,一下就是我找到的方法并加以修改和测试

首先我用了 ThoughtWorks.QRCode 这个二维码生成的方法,代码如下

      //生成二维码
        private static string QRCode(string xx)
        {
            System.Drawing.Bitmap bt;
            string enCodeString = xx;

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
            qrCodeEncoder.QRCodeScale = 5;//大小(值越大生成的二维码图片像素越高)
            qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;//错误效验、错误更正(有4个等级)
            qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色
            qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色
        

            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);

            string filename = "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);
            }

            else {
     
                bt.Save(codeUrl);//保存图片
            }
           
            return codeUrl;
        }




       //读取二维码内容
        public static string CodeDecoder(string filePath)
        {

            try
            {
                if (!System.IO.File.Exists(filePath))
                    return null;
                Bitmap myBitmap = new Bitmap(System.Drawing.Image.FromFile(filePath));
                QRCodeDecoder decoder = new QRCodeDecoder();
                string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap),Encoding.UTF8);
       
                return decodedString;
            }
            catch (Exception ex)
            {
                throw ex;
            }





        }

但是后来发现一个问题,假如把二维码插入文档中并把文档打印扫描后上传文件再去用此方法识别就是出现乱码,并且因为文件过大识别会很慢,后来怎么改后改不好乱码的问题,于是我换了Zxing 包用

来识别识别的速度也有很大的提升,乱码问题也不再出现Zxing识别代码:

   private   string  Zxing(string filePath) {

            if (!System.IO.File.Exists(filePath))
                return null;
            BarcodeReader reader = new BarcodeReader();
            reader.Options.CharacterSet = "UTF-8";
            Bitmap myBitmap = new Bitmap(filePath);
            var result = reader.Decode(myBitmap);
            myBitmap.Dispose();
            return (result == null) ? null : result.Text;


        }

 

posted @ 2021-03-29 20:15  .就这  阅读(953)  评论(0)    收藏  举报