qrcode二维码


此文件是在MVC中使用ThoughtWorks.QRCode生成网页版二维码需下载dll文件,可带Logo标志 下载地址

项目中需引用此dll文件,而文件中需导入

using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;
using System.Drawing.Drawing2D;
using System.Drawing;
using System.Text;
//生成二维码方法一
//传入要生成二维码的字符串nr private void CreateCode_Simple(string nr) { //创建二维码生成类 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); //设置编码模式 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量度最大40 qrCodeEncoder.QRCodeScale = 4; //设置编码版本 qrCodeEncoder.QRCodeVersion = 8; //设置编码错误纠正 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //System.Drawing.Image image = qrCodeEncoder.Encode("330326 浙江"); //根据字符串生成二维码图片System.Text.Encoding.UTF8方式编码支持中文 System.Drawing.Image image = qrCodeEncoder.Encode(nr, System.Text.Encoding.UTF8); //图片文件命名以日期时间格式或用Guid(string guid = Guid.NewGuid().ToString().Replace("-", "") + ".png";) string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg"; //保存路径及文件名 string filepath = Server.MapPath(@"~\Upload") + "\\" + filename;
       //从数据流中读取数据 System.IO.FileStream fs
= new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write); //保存路径及文件名大图小图组合成一张图 CombinImage(image,Server.MapPath("~/images/3.jpg")).Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg); fs.Close(); image.Dispose(); //二维码解码 var codeDecoder = CodeDecoder(filepath); }
/// <summary>    
         /// 调用此函数后使此两种图片合并,类似相册,有个    
         /// 背景图,中间贴自己的目标图片    
         /// </summary>    
         /// <param name="imgBack">粘贴的源图片大图</param>    
         /// <param name="destImg">粘贴的目标图片小图</param>    
         public static Image CombinImage(Image imgBack, string destImg)
         {
             Image img = Image.FromFile(destImg);        //Logo图片 
             //logo占二维码图片尺寸为30%比例
             img = KiResizeImage(img, imgBack.Width * 3 / 10, imgBack.Height * 3 / 10, 0);

             Graphics g = Graphics.FromImage(imgBack);
 
             g.DrawImage(imgBack, 0, 0, imgBack.Width, imgBack.Height);      //g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);     
 
             //g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);//相片四周刷一层黑色边框    
 
             //g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高);    
 
             g.DrawImage(img, imgBack.Width / 2 - img.Width / 2, imgBack.Width / 2 - img.Width / 2, img.Width, img.Height);
             GC.Collect();
             return imgBack;
         }
         /// <summary>    
         /// Resize图片    
         /// </summary>    
         /// <param name="bmp">原始Bitmap</param>    
         /// <param name="newW">新的宽度</param>    
         /// <param name="newH">新的高度</param>    
         /// <param name="Mode">保留着,暂时未用</param>    
         /// <returns>处理以后的图片</returns>    
         public static Image KiResizeImage(Image bmp, int newW, int newH, int Mode)
         {
             try
             {
                 Image b = new Bitmap(newW, newH);
                 Graphics g = Graphics.FromImage(b);
                 // 插值算法的质量    
                 g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                 g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
                 g.Dispose();
                 return b;
             }
             catch
             {
                 return null;
             }
         }
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="strData">要生成的文字或者数字,支持中文。如: "330326 浙江 或者:111111"</param>
        /// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
        /// <param name="level">大小:L M Q H</param>
        /// <param name="version">版本:如 8</param>
        /// <param name="scale">比例:如 4</param>
        /// <returns></returns>
        public ActionResult CreateCode_Choose(string strData, string qrEncoding, string level, int version, int scale)
        {
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            string encoding = qrEncoding;
            switch (encoding)
            {
                case "Byte":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    break;
                case "AlphaNumeric":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
                    break;
                case "Numeric":
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
                    break;
                default:
                    qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                    break;
            }

            qrCodeEncoder.QRCodeScale = scale;
            qrCodeEncoder.QRCodeVersion = version;
            switch (level)
            {
                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;
                default:
                    qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
                    break;
            }
            //文字生成图片
            Image image = qrCodeEncoder.Encode(strData, System.Text.Encoding.UTF8);
            string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
            string filepath = Server.MapPath(@"~\Upload") + "\\" + filename;
            //如果文件夹不存在,则创建
            //if (!Directory.Exists(filepath))
            //    Directory.CreateDirectory(filepath);
            System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
            CombinImage(image, Server.MapPath("~/images/3.jpg")).Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            fs.Close();
            image.Dispose();
            return Content(@"/Upload/" + filename);
        }
 /// <summary>
        /// 二维码解码
        /// </summary>
        /// <param name="filePath">图片路径</param>
        /// <returns></returns>
        public string CodeDecoder(string filePath)
        {
            if (!System.IO.File.Exists(filePath))
                return null;
            Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
            QRCodeDecoder decoder = new QRCodeDecoder();
            string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
            return decodedString;
        }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM