コード例 #1
0
        public static byte[] CreateImage(string randomcode)
        {
            int      maxValue = 30;
            Bitmap   bitmap   = new Bitmap(randomcode.Length * 30, 32);
            Graphics graphics = Graphics.FromImage((Image)bitmap);

            graphics.SmoothingMode = SmoothingMode.HighQuality;
            byte[] numArray;
            try
            {
                graphics.Clear(Color.Transparent);
                int   index1 = CheckCode.rand.Next(2);
                Brush brush  = (Brush) new SolidBrush(CheckCode.c[index1]);
                for (int index2 = 0; index2 < 1; ++index2)
                {
                    int num1 = CheckCode.rand.Next(bitmap.Width / 2);
                    int num2 = CheckCode.rand.Next(bitmap.Width * 3 / 4, bitmap.Width);
                    int num3 = CheckCode.rand.Next(bitmap.Height);
                    int num4 = CheckCode.rand.Next(bitmap.Height);
                    graphics.DrawBezier(new Pen(CheckCode.c[index1], 2f), (float)num1, (float)num3, (float)((num1 + num2) / 4), 0.0f, (float)((num1 + num2) * 3 / 4), (float)bitmap.Height, (float)num2, (float)num4);
                }
                char[]       chArray = randomcode.ToCharArray();
                StringFormat format  = new StringFormat(StringFormatFlags.NoClip);
                format.Alignment     = StringAlignment.Center;
                format.LineAlignment = StringAlignment.Center;
                for (int index2 = 0; index2 < chArray.Length; ++index2)
                {
                    int   index3 = CheckCode.rand.Next(5);
                    Font  font   = new Font(CheckCode.font[index3], 22f, FontStyle.Bold);
                    Point point  = new Point(16, 16);
                    float angle  = (float)ThreadSafeRandom.NextStatic(-maxValue, maxValue);
                    graphics.TranslateTransform((float)point.X, (float)point.Y);
                    graphics.RotateTransform(angle);
                    graphics.DrawString(chArray[index2].ToString(), font, brush, 1f, 1f, format);
                    graphics.RotateTransform(-angle);
                    graphics.TranslateTransform(2f, -(float)point.Y);
                }
                MemoryStream memoryStream = new MemoryStream();
                bitmap.Save((Stream)memoryStream, ImageFormat.Png);
                numArray = memoryStream.ToArray();
            }
            finally
            {
                graphics.Dispose();
                bitmap.Dispose();
            }
            return(numArray);
        }
コード例 #2
0
ファイル: CheckCode.cs プロジェクト: changthai2540/DDTank-II
        public static byte[] CreateImage(string randomcode)
        {
            int      num      = 30;
            int      width    = randomcode.Length * 30;
            Bitmap   bitmap   = new Bitmap(width, 36);
            Graphics graphics = Graphics.FromImage(bitmap);

            byte[] result;
            try
            {
                graphics.Clear(Color.Transparent);
                int   num2  = CheckCode.rand.Next(7);
                Brush brush = new SolidBrush(CheckCode.c[num2]);
                for (int i = 0; i < 1; i++)
                {
                    int num3 = CheckCode.rand.Next(bitmap.Width / 2);
                    int num4 = CheckCode.rand.Next(bitmap.Width * 3 / 4, bitmap.Width);
                    int num5 = CheckCode.rand.Next(bitmap.Height);
                    int num6 = CheckCode.rand.Next(bitmap.Height);
                    graphics.DrawBezier(new Pen(CheckCode.c[num2], 2f), (float)num3, (float)num5, (float)((num3 + num4) / 4), 0f, (float)((num3 + num4) * 3 / 4), (float)bitmap.Height, (float)num4, (float)num6);
                }
                char[]       array        = randomcode.ToCharArray();
                StringFormat stringFormat = new StringFormat(StringFormatFlags.NoClip);
                stringFormat.Alignment     = StringAlignment.Center;
                stringFormat.LineAlignment = StringAlignment.Center;
                for (int j = 0; j < array.Length; j++)
                {
                    int   num7  = CheckCode.rand.Next(5);
                    Font  font  = new Font(CheckCode.font[num7], 22f, FontStyle.Bold);
                    Point point = new Point(16, 16);
                    float num8  = (float)ThreadSafeRandom.NextStatic(-num, num);
                    graphics.TranslateTransform((float)point.X, (float)point.Y);
                    graphics.RotateTransform(num8);
                    graphics.DrawString(array[j].ToString(), font, brush, 1f, 1f, stringFormat);
                    graphics.RotateTransform(-num8);
                    graphics.TranslateTransform(2f, (float)(-(float)point.Y));
                }
                MemoryStream memoryStream = new MemoryStream();
                bitmap.Save(memoryStream, ImageFormat.Png);
                result = memoryStream.ToArray();
            }
            finally
            {
                graphics.Dispose();
                bitmap.Dispose();
            }
            return(result);
        }
コード例 #3
0
ファイル: CheckCode.cs プロジェクト: uvbs/DDTank-3.0
        ///  <summary>
        ///  创建随机码图片
        ///  </summary>
        ///  <param  name="randomcode">随机码</param>
        public static byte[] CreateImage(string randomcode)
        {
            int      randAngle = 30;                       //随机转动角度
            int      mapwidth  = (int)(randomcode.Length * 30);
            Bitmap   map       = new Bitmap(mapwidth, 36); //创建图片背景
            Graphics graph     = Graphics.FromImage(map);

            try
            {
                graph.Clear(Color.White);//清除画面,填充背景


                int   cindex = rand.Next(7);
                Brush b      = new System.Drawing.SolidBrush(c[cindex]);

                for (int i = 0; i < 1; i++)
                {
                    int x1 = rand.Next(map.Width / 2);
                    int x2 = rand.Next(map.Width * 3 / 4, map.Width);
                    int y1 = rand.Next(map.Height);
                    int y2 = rand.Next(map.Height);

                    graph.DrawBezier(new Pen(c[cindex], 2), x1, y1, (x1 + x2) / 4, 0, (x1 + x2) * 3 / 4, map.Height, x2, y2);
                }


                //验证码旋转,防止机器识别
                char[] chars = randomcode.ToCharArray();//拆散字符串成单字符数组

                //文字距中
                StringFormat format = new StringFormat(StringFormatFlags.NoClip);
                format.Alignment     = StringAlignment.Center;
                format.LineAlignment = StringAlignment.Center;

                for (int i = 0; i < chars.Length; i++)
                {
                    int findex = rand.Next(5);

                    Font f = new System.Drawing.Font(font[findex], 22, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)

                    Point dot = new Point(16, 16);
                    //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的
                    float angle = ThreadSafeRandom.NextStatic(-randAngle, randAngle); //转动的度数

                    graph.TranslateTransform(dot.X, dot.Y);                           //移动光标到指定位置
                    graph.RotateTransform(angle);
                    graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);
                    graph.RotateTransform(-angle);       //转回去
                    graph.TranslateTransform(2, -dot.Y); //移动光标到指定位置
                }

                //生成图片
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                return(ms.ToArray());
            }
            finally
            {
                graph.Dispose();
                map.Dispose();
            }
        }
コード例 #4
0
        public static byte[] CreateVane(string wind, int id)
        {
            int randAngle = 0; //随机转动角度
            int mapwidth  = 0;
            int f_size    = 18;

            if (id == 0)
            {
                mapwidth = 15;
                f_size   = 36;
            }
            else
            {
                mapwidth = 24;
                f_size   = 18;
            }
            Bitmap map = new Bitmap(mapwidth, 35);//创建图片背景

            Graphics graph = Graphics.FromImage(map);

            try
            {
                graph.Clear(Color.Transparent);//清除画面,填充背景

                int   cindex = rand.Next(7);
                Brush b      = new System.Drawing.SolidBrush(c[cindex]);

                //验证码旋转,防止机器识别
                //char[] chars = wind.ToCharArray();//拆散字符串成单字符数组

                //文字距中
                StringFormat format = new StringFormat(StringFormatFlags.NoClip);
                format.Alignment     = StringAlignment.Center;
                format.LineAlignment = StringAlignment.Center;

                //for (int i = 0; i < chars.Length; i++)
                //{
                int findex = rand.Next(5);

                Font f = new System.Drawing.Font(font[findex], f_size, FontStyle.Bold);    //字体样式(参数2为字体大小)

                Point dot = new Point(16, 16);
                //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的
                float angle = ThreadSafeRandom.NextStatic(-randAngle, randAngle); //转动的度数

                graph.TranslateTransform(dot.X, dot.Y);                           //移动光标到指定位置
                graph.RotateTransform(angle);
                graph.DrawString(wind.ToString(), f, b, 1, 1, format);
                graph.RotateTransform(-angle);       //转回去
                graph.TranslateTransform(2, -dot.Y); //移动光标到指定位置

                //}

                //生成图片
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                map.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                return(ms.ToArray());
            }
            finally
            {
                graph.Dispose();
                map.Dispose();
            }
        }