zoukankan      html  css  js  c++  java
  • C# 生成彩色二维码

    /// <summary>
            /// 生成彩色二维码
            /// </summary>
            /// <param name="data">二维码内容</param>
            /// <param name="filename">生成的图片名称(如:123.jpg)</param>
            /// <param name="filepath">图片存放路径(如:Images\CustomerQRCode)</param>
            /// <returns></returns>
            public static bool CreateQRCode(string data, string filename, string filepath)
            {
    
                if (string.IsNullOrWhiteSpace(data) || string.IsNullOrWhiteSpace(filename) || string.IsNullOrWhiteSpace(filepath))
                    return false;
    
                QRCodeWriter writer = new QRCodeWriter();
                Hashtable hints = new Hashtable();
                hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
                hints.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
                hints.Add(EncodeHintType.VERSION_START, 5);
    
                Bitmap image = writer.encode(data, BarcodeFormat.QR_CODE, 0x200, 0x200, hints).ToBitmap();//黑白二维码
    
                Bitmap bitmap2 = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb);
                Graphics graphics = Graphics.FromImage(bitmap2);
                graphics.SmoothingMode = SmoothingMode.AntiAlias;
                graphics.DrawImage(image, 0, 0);
                image.Dispose();
    
                Bitmap bitmap3 = QrCodeVertical(bitmap2.Width, bitmap2.Height);//彩色渐变二维码
    
    
                Color color = Color.FromArgb(200, 224, 114, 1);
                int num = 140;
                try
                {
                    num -= (Encoding.UTF8.GetBytes(data).Length - 20) / 2;
                }
                catch (Exception)
                {
                }
                int num2 = num;
                int num3 = num2;
                for (int i = 0; i < bitmap2.Width; i++)
                {
                    for (int j = 0; j < bitmap2.Height; j++)
                    {
                        Color color3;
                        Color pixel = bitmap2.GetPixel(i, j);
                        if ((i < num2) && (j < num3))
                        {
                            color3 = ((pixel.A == 0xff) && (pixel.B == 0)) ? color : pixel;
                        }
                        else
                        {
                            color3 = ((pixel.A == 0xff) && (pixel.B == 0)) ? bitmap3.GetPixel(i, j) : pixel;
                        }
                        bitmap2.SetPixel(i, j, color3);
                    }
                }
                bitmap3.Dispose();
    
                #region 添加二维码标题
                string str2 = "";//标题一
                if (str2.Length < 1)
                {
                    str2 = "MyTest";
                }
                float emSize = 32f;
                emSize -= (str2.Length - 4) * 1.8f;
                Font font = new Font("微软雅黑", emSize, FontStyle.Bold);
                SizeF ef = graphics.MeasureString(str2, font);
                float num7 = (bitmap2.Width - ef.Width) / 2f;
                Brush brush = new SolidBrush(Color.FromArgb(0xff, 0x3a, 0xb2, 0xc2));
                Brush brush2 = new SolidBrush(Color.White);
                int y = 50;
                graphics.FillRectangle(brush2, new Rectangle((int)num7, y, (int)ef.Width, (int)ef.Height));
                graphics.DrawString(str2, font, brush, (float)((int)num7), (float)y);
                Brush brush3 = new SolidBrush(Color.FromArgb(0xff, 0x3a, 0xb2, 0xc2));
                int width = 140;
                graphics.FillEllipse(brush2, (bitmap2.Width - width) / 2, (bitmap2.Height - width) / 2, width, width);
                int num10 = 0x80;
                graphics.FillEllipse(brush3, (bitmap2.Width - num10) / 2, (bitmap2.Height - num10) / 2, num10, num10);
                int num11 = 110;
                graphics.FillEllipse(brush2, (bitmap2.Width - num11) / 2, (bitmap2.Height - num11) / 2, num11, num11);
    
                #endregion
    
                #region 添加二维码中间内容 
                str2 = "";//标题二
                if (str2.Length < 1)
                {
                    str2 = "Test";
                }
                float num12 = 32f;
                num12 -= (str2.Length - 3) * 3.5f;
                Font font2 = new Font("Meiryo", num12, FontStyle.Bold);
                ef = graphics.MeasureString(str2, font2);
                float x = ((bitmap2.Width - ef.Width) / 2f) + 2f;
                float num14 = ((bitmap2.Height - ef.Height) / 2f) + 8f;
                graphics.DrawString(str2, font2, brush3, x, num14);
                graphics.Dispose();
                #endregion
    
    
                filepath = System.Web.HttpContext.Current.Server.MapPath(@"~"+ filepath) + "\" + filename;
    
                //filepath = filepath + filename;
                System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
                
                bitmap2.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
    
                fs.Close();
                image.Dispose();
    
    
    
                return true;
    
            }
  • 相关阅读:
    【SCP-GO-100】梦 中 染
    【scp系列】SCP-4711 不便利便利店
    【scp系列】SCP-2298 塑料盒里的生活
    【scp系列】SCP-CN-1219 关云长大战外星人
    【scp系列】SCP-4444 以米斯达之名
    使用Ubuntu搭建Owncloud私有云
    python中函数的使用初步
    IOS自动化环境搭建踩坑指南
    接口测试工具apifox
    windowns上搭建vscode+node.js开发环境
  • 原文地址:https://www.cnblogs.com/z-hj/p/6055137.html
Copyright © 2011-2022 走看看