• 二维码生成方法


    从网上到处找代码东拼西凑出来的一个二维码生成方法,支持给二维码上面贴图标。

    需要通过Nuget引用QRCode.Net

    先贴个调用的Demo吧,直接从项目中拷过来的,看意思就好。

      public string GetUserQRCode(Web_User user)
            {
              var url = VirtualPaths.HostAddress + "/Member/MemberSpaceAddFriend?name=" + user.Name;
                string userHeadphoto = "";
                //如果用户的头像不为空,则给二维码加上用户头像
                if (!string.IsNullOrEmpty(user.HeadPhoto))
                {
                     userHeadphoto= VirtualPaths.ImgDir+user.HeadPhoto;
                }
                var path = VirtualPaths.ImgDir+ "/Upload/QRCode/";
                string qrCode = SaveCodeImg(url, userHeadphoto, path);
                user.QRCode = "/Upload/QRCode/" + qrCode;
               UpdateUser(user);
                return user.QRCode;
            }
    调用的Demo
        #region 二维码生成基础方法
            /// <summary>
            /// 生成用户信息的二维码
            /// </summary>
            /// <param name="url">要生成的字符串</param>
            /// <param name="headPhoto">要贴到二维码上面的头像</param>
            /// <param name="filePath">文件的保存路径</param>
            /// <returns></returns>
            public string SaveCodeImg(string url, string headPhoto, string filePath)
            {
                var fileName = GetFileNameByDate();
                var path = Path.Combine(filePath, fileName);
                QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.H);
                QrCode qrCode = new QrCode();
                qrEncoder.TryEncode(url, out qrCode);
                var renderer = new GraphicsRenderer(new FixedModuleSize(4, QuietZoneModules.Two));
                //var image = new Bitmap();
                Image img = new Bitmap(200, 200);
                Image qrcode = new Bitmap(200, 200);
                using (Graphics g = Graphics.FromImage(img))
                {
                    renderer.Draw(g, qrCode.Matrix);
                    g.DrawImage(img, new Point { X = 0, Y = 0 });
                    //using (MemoryStream stream = new MemoryStream())
                    //{
                    //    img.Save(stream, ImageFormat.Jpeg);
                    //}
                    if (string.IsNullOrEmpty(headPhoto) || !File.Exists(headPhoto))
                    {
                       // img.Save(path+".jpg");
                        qrcode = img;
                        qrcode.Save(path+".jpg");
                    }
                    else
                    {
                        qrcode = CombinImage(img, headPhoto);
                        qrcode.Save(path + ".jpg");
                    }
                }
                return fileName+".jpg";
            }
            private string GetFileNameByDate()
            {
                string productnumber = "";
                //按年月日生成前12位
                productnumber = DateTime.Now.Year.ToString().Substring(2, 2) + DateTime.Now.Month.ToString().PadLeft(2, '0') + DateTime.Now.Day.ToString().PadLeft(2, '0');
                productnumber += DateTime.Now.Hour.ToString().PadLeft(2, '0');
                // +DateTime.Now.Minute.ToString().PadLeft(2, '0') + DateTime.Now.Second.ToString().PadLeft(2, '0');
                //随即数生成4位
                var rnd = new Random((int)DateTime.Now.Ticks);
                productnumber += rnd.Next(0, 9999).ToString().PadLeft(4, '0');
                return productnumber;
            }
            public static Image CombinImage(Image imgBack, string destImg)
            {
                Image img = Image.FromFile(destImg);        //照片图片    
                if (img.Height != 65 || img.Width != 65)
                {
                    img = KiResizeImage(img, 65, 65, 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;
            }
            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;
                }
            }
    
            #endregion
  • 相关阅读:
    Rraspberry Pi 4B python3 安装opencv
    如何用arduion制作智能 垃圾桶
    MySQL(二)表结构的管理
    MySQL(一)基础操作
    vc++绘图基础
    网站签~
    (转)Oracle 知识日常积累
    利用反射判断bean属性不为空(null和空串)
    (转)Oracle 单字段拆分成多行
    svn 解决树冲突
  • 原文地址:https://www.cnblogs.com/baiyunchen/p/4218698.html
Copyright © 2020-2023  润新知