• 获取图形验证码


           /// <summary>
            /// 获取图形验证码
            /// </summary>
            /// <param name="postVal"></param>
            /// <returns></returns>
            [HttpPost]
                 
            public IActionResult   ValidateImgCode([FromBody]JObject postVal)
            {
    
                int width =  100;
                int height = 40;
                int fontsize = 20;
                string ImgCode = string.Empty;
                
                //第一种用内存流的返回值
                //////////////////////////////////////////////////////////////////////////////////////////
                System.IO.MemoryStream ms = ValidateCode.Create_Validate_Graphic(out ImgCode, 4, width, height, fontsize);
                 return File(ms.ToArray(), @"image/jpeg");
    
    
                //////////////////////////////////////////////////////////////////////////
                //下面是用字节返回
                //////////////////////////////////////////////////////////////////////////
                //byte[] bytes =  ValidateCode.CreateValidateGraphic(out ImgCode, 4, width, height, fontsize);
                // return File(bytes, @"image/jpeg");
                //return AsResult.Success(new
                //{
                //    CodeImg = ImgCode,
                //    CodeByte= File(bytes, @"image/jpeg")
                //}
                //);
                //////////////////////////////////////////////////////////////////////////
                //////////////////////////////////////////////////////////////////////////
    
            }
     /// <summary>
        /// 随机码和图片流生成
        /// </summary>
        public class ValidateCode
        {
    
                    /// <summary>
                    /// 产生图像验证码
                    /// </summary>
                    /// <param name="Code">验证码。</param>
                    /// <param name="CodeLength">验证码元数。</param>
                    /// <param name="Width"></param>
                    /// <param name="Height"></param>
                    /// <param name="FontSize"></param>
                    /// <returns></returns>       
            public static byte[] CreateValidateGraphic(out String ImgCode, int CodeLength, int Width, int Height, int FontSize)
            {
                String sCode = String.Empty;
                //顏色列表,用于验证码噪点 噪线
                 Color[] oColors ={
                 Color.Black,
                 Color.Red,
                 Color.Blue,
                 Color.Green,
                 Color.Orange,
                 Color.Brown,
                 Color.Brown,
                 Color.DarkBlue};
                //字体列表用于验证码
                string[] oFontNames = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
                //驗證碼的字元集,去掉了一些容易混淆的字元
                char[] oCharacter = { '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
                Random oRnd = new Random();
                Bitmap oBmp = null;
                Graphics oGraphics = null;
                int N1 = 0;
                Point oPoint1 = default(Point);
                Point oPoint2 = default(Point);
                string sFontName = null;
                Font oFont = null;
                Color oColor = default(Color);
                //生成验证码字串
                for (N1 = 0; N1 <= CodeLength - 1; N1++)
                {
                    sCode += oCharacter[oRnd.Next(oCharacter.Length)];
                }
                //定义图像的大小,生成图像的实例 
                oBmp = new Bitmap(Width, Height);
                //从Img对象生成新的Graphics对象
                oGraphics = Graphics.FromImage(oBmp);
                //背景设为白色
                oGraphics.Clear(Color.White);
                try
                {
                    for (N1 = 0; N1 <= 4; N1++)
                    {
                        //画噪线
                        oPoint1.X = oRnd.Next(Width);
                        oPoint1.Y = oRnd.Next(Height);
                        oPoint2.X = oRnd.Next(Width);
                        oPoint2.Y = oRnd.Next(Height);
                        oColor = oColors[oRnd.Next(oColors.Length)];
                        oGraphics.DrawLine(new Pen(oColor), oPoint1, oPoint2);
                    }
                    float spaceWith = 0, dotX = 0, dotY = 0;
                    if (CodeLength != 0)
                    {
                        spaceWith = (Width - FontSize * CodeLength - 10) / CodeLength;
                    }
                    for (N1 = 0; N1 <= sCode.Length - 1; N1++)
                    {
                        //画验证码子串
                        sFontName = oFontNames[oRnd.Next(oFontNames.Length)];
                        oFont = new Font(sFontName, FontSize, FontStyle.Italic);
                        oColor = oColors[oRnd.Next(oColors.Length)];
                        dotY = (Height - oFont.Height) / 2 + 2;//中心下移2像素
                        dotX = Convert.ToSingle(N1) * FontSize + (N1 + 1) * spaceWith;
                        oGraphics.DrawString(sCode[N1].ToString(), oFont, new SolidBrush(oColor), dotX, dotY);
                    }
                    //在随机位置画背景点 
                    for (int i = 0; i <= 30; i++)
                    {
                        //画噪点
                        int x = oRnd.Next(oBmp.Width);
                        int y = oRnd.Next(oBmp.Height);
                        Color clr = oColors[oRnd.Next(oColors.Length)];
                        oBmp.SetPixel(x, y, clr);
                    }
                    ImgCode = sCode;
                    //保存图片数据
                    MemoryStream stream = new MemoryStream();
                    oBmp.Save(stream, ImageFormat.Jpeg);
                    //输出图片流
                    return  stream.ToArray();
                }
                
                finally
                {
                    oGraphics.Dispose();
                    oBmp.Dispose();
                }
    
            }
    
    
            /// <summary>
            /// 内存流的方式返回  随机码和图片流生成
            /// </summary>
            /// <param name="ImgCode"></param>
            /// <param name="CodeLength"></param>
            /// <param name="Width"></param>
            /// <param name="Height"></param>
            /// <param name="FontSize"></param>
            /// <returns></returns>
            public static MemoryStream Create_Validate_Graphic(out String ImgCode, int CodeLength, int Width, int Height, int FontSize)
            {
                String sCode = String.Empty;
                //顏色列表,用于验证码噪点 噪线
                Color[] oColors ={
                 Color.Black,
                 Color.Red,
                 Color.Blue,
                 Color.Green,
                 Color.Orange,
                 Color.Brown,
                 Color.Brown,
                 Color.DarkBlue};
                //字体列表用于验证码
                string[] oFontNames = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
                //驗證碼的字元集,去掉了一些容易混淆的字元
                char[] oCharacter = { '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' };
                Random oRnd = new Random();
                Bitmap oBmp = null;
                Graphics oGraphics = null;
                int N1 = 0;
                Point oPoint1 = default(Point);
                Point oPoint2 = default(Point);
                string sFontName = null;
                Font oFont = null;
                Color oColor = default(Color);
                //生成验证码字串
                for (N1 = 0; N1 <= CodeLength - 1; N1++)
                {
                    sCode += oCharacter[oRnd.Next(oCharacter.Length)];
                }
                //定义图像的大小,生成图像的实例 
                oBmp = new Bitmap(Width, Height);
                //从Img对象生成新的Graphics对象
                oGraphics = Graphics.FromImage(oBmp);
                //背景设为白色
                oGraphics.Clear(Color.White);
                try
                {
                    for (N1 = 0; N1 <= 4; N1++)
                    {
                        //画噪线
                        oPoint1.X = oRnd.Next(Width);
                        oPoint1.Y = oRnd.Next(Height);
                        oPoint2.X = oRnd.Next(Width);
                        oPoint2.Y = oRnd.Next(Height);
                        oColor = oColors[oRnd.Next(oColors.Length)];
                        oGraphics.DrawLine(new Pen(oColor), oPoint1, oPoint2);
                    }
                    float spaceWith = 0, dotX = 0, dotY = 0;
                    if (CodeLength != 0)
                    {
                        spaceWith = (Width - FontSize * CodeLength - 10) / CodeLength;
                    }
                    for (N1 = 0; N1 <= sCode.Length - 1; N1++)
                    {
                        //画验证码子串
                        sFontName = oFontNames[oRnd.Next(oFontNames.Length)];
                        oFont = new Font(sFontName, FontSize, FontStyle.Italic);
                        oColor = oColors[oRnd.Next(oColors.Length)];
                        dotY = (Height - oFont.Height) / 2 + 2;//中心下移2像素
                        dotX = Convert.ToSingle(N1) * FontSize + (N1 + 1) * spaceWith;
                        oGraphics.DrawString(sCode[N1].ToString(), oFont, new SolidBrush(oColor), dotX, dotY);
                    }
                    //在随机位置画背景点 
                    for (int i = 0; i <= 30; i++)
                    {
                        //画噪点
                        int x = oRnd.Next(oBmp.Width);
                        int y = oRnd.Next(oBmp.Height);
                        Color clr = oColors[oRnd.Next(oColors.Length)];
                        oBmp.SetPixel(x, y, clr);
                    }
                    ImgCode = sCode;
                    //保存图片数据
                    MemoryStream stream = null;
    
                 stream = new MemoryStream();
                    oBmp.Save(stream, ImageFormat.Jpeg);
                    //输出图片流
                    return stream;
                }
    
                finally
                {
                    oGraphics.Dispose();
                    oBmp.Dispose();
                }
    
            }
        }
  • 相关阅读:
    (转)Mat, vector<point2f>,Iplimage等等常见类型转换
    人脸检测与识别的趋势和分析
    经典网络LeNet5看卷积神经网络各层的维度变化
    C++: int int& int * int**的区别、联系和用途
    c++从txt中读取数据,数据并不是一行路径(实用)
    Spyder常用快捷键
    批量读写变换图片(转)
    OpenCV属性页配置问题~
    视觉目标检测和识别之过去,现在及可能(2017.06.28)
    数据库---SQL Server
  • 原文地址:https://www.cnblogs.com/Warmsunshine/p/8615069.html
Copyright © 2020-2023  润新知