C#单个二维码生成的教程我在之前写过一篇博客,昨天又接了个需求,是之前那个单个二维码生成的升级版,需要把系统中所有经销商的邀请二维码直接生成到电脑桌面上。

实现起来倒是不难,自动在桌面创建一个文件夹,然后查出来所有经销商的信息,然后循环组合经销商的邀请链接并生成二维码,最后把这个二维码存到刚才生成的文件夹就行了

废话不多说了,直接贴代码出来, 记得在NuGet里下载引用QRCoder.BLL ,不会玩的话,去看之前我写的那个博客即可。

        public ActionResult GeneralizeBatchStorage()
        {
            try
            {
                string desktopPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
                string returntext = DateTime.Now.ToString("yyyyMMddHHmmss") + "二维码下载";
                string newStoragePath = desktopPath + @"\" + returntext;
                Directory.CreateDirectory(newStoragePath);
                DataTable data = CarBindBLL.IsCarDatasUsereseqws();
                List<SysUsersModel> carAndBindModels = ConvertHelper<SysUsersModel>.ConvertToList(data);
                foreach (var item in carAndBindModels)
                {
                    string generalizeUrl = WebConfigurationManager.AppSettings["apiUrl"] + new DesArithmetic().DesEncrypt(item.usr_name);
                    byte[] generalizebyte = ImgToByte(GetCode(generalizeUrl, 8, 7, WebConfigurationManager.AppSettings["icoImg"], 15, 1, false));
                    Image image = Image.FromStream(new MemoryStream(generalizebyte));
                    string imgStoragePath = newStoragePath + @"\" + item.usr_name + ".jpg";
                    image.Save(imgStoragePath, ImageFormat.Jpeg);
                    CodeAddText(item.usr_name, imgStoragePath);
                }
                return Content("经销商二维码批量生成完毕!已在你的电脑桌面生成名为:《" + returntext + "》的文件夹!");
            }
            catch (Exception ex)
            {
                return Content("批量生成发生错误!");
            }
        }

这个需求里对二维码还有个小要求,就是每张二维码下面要带上经销商的名字,上面代码不变,把下面合并位图的代码方法加上就行了。一个是合并位图,一个是把图片转成byte[]。

        private static Bitmap CodeAddTextByTwo(string name, Bitmap bitmap)
        {
            Font font = new Font("GB2312", 16, FontStyle.Regular);//设置字体,大小,粗细
            SolidBrush sbrush = new SolidBrush(Color.Black);//设置颜色
            try
            {
                Bitmap bmp = new Bitmap(270, 310);
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(Color.White);
                g.DrawString(name, font, sbrush, new PointF((Int32)(bmp.Width - name.Length * 10.8 - 40) / 2, bmp.Height - 35));
                // 合并位图
                g.DrawImage(bitmap, new Rectangle(0, 0, 270, 270));
                return bmp;
            }
            catch
            {
                Bitmap bmp = new Bitmap(343, 403);
                return bmp;
            }
        }
 public static byte[] ImgToByte(Bitmap bitmap)
        {
            try
            {
                MemoryStream ms = new MemoryStream();
                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length);
                ms.Close();
                return arr;
            }
            catch (Exception ex)
            {
                return null;
            }
        }