Exemplo n.º 1
0
        /// <summary>
        /// 创建随机图片
        /// </summary>
        /// <param name="value">值</param>
        /// <param name="imageWidth">图片宽度</param>
        /// <param name="imageHeight">图片高度</param>
        /// <param name="imageBgColor">图片背景颜色</param>
        /// <param name="imageTextColor1">图片文字颜色</param>
        /// <param name="imageTextColor2">图片文字颜色</param>
        /// <returns>随机图片</returns>
        public VerifyImageInfo CreateRandomImage(string value, int imageWidth, int imageHeight, Color imageBgColor, Color imageTextColor1, Color imageTextColor2)
        {
            var      image = new Bitmap(imageWidth, imageHeight);
            Graphics g     = Graphics.FromImage(image);

            //保存图片数据
            //var stream = new MemoryStream();
            try
            {
                //生成随机生成器
                Random random = new Random();

                //清空图片背景色
                g.Clear(imageBgColor);

                //画图片的背景噪音线
                for (int i = 0; i < 5; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);

                    g.DrawLine(new Pen(Color.FromArgb(random.Next(255), random.Next(255), random.Next(255))), x1, y1, x2, y2);
                }

                var font  = new Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
                var brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                                                    imageTextColor1,
                                                    imageTextColor2,
                                                    1.2f,
                                                    true);
                g.DrawString(value, font, brush, 2, 2);

                //画图片的前景噪音点
                for (int i = 0; i < 80; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);

                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }

                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

                var verifyImage = new VerifyImageInfo();
                //image.Save(stream, ImageFormat.Jpeg);
                verifyImage.Image       = image;// stream.ToArray();
                verifyImage.ContentType = "image/jpeg";
                return(verifyImage);
            }
            finally
            {
                //if (stream != null)
                //    stream.Dispose();
                if (g != null)
                {
                    g.Dispose();
                }
                if (image != null)
                {
                    image.Dispose();
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 产生验证码
        /// </summary>
        /// <param name="len">长度</param>
        /// <param name="onlyNum">只是数字</param>
        /// <returns>验证码对象</returns>
        public VerifyImageInfo GenerateImage(int len, bool onlyNum)
        {
            var verifyimage = new VerifyImageInfo {
                ImageFormat = ImageFormat.Jpeg, ContentType = "image/pjpeg"
            };
            var code = CreateVerifyCode(len, onlyNum);

            int       width  = 23 * code.Length;
            const int height = 30;

            var      bitmap  = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            Color    bgcolor = Color.White;
            Graphics g       = Graphics.FromImage(bitmap);

            g.SmoothingMode = SmoothingMode.HighSpeed;
            g.Clear(bgcolor);

            const int fixedNumber = 60;

            var drawBrush = new SolidBrush(Color.FromArgb(Next(100), Next(100), Next(100)));

            for (int i = 0; i < 3; i++)
            {
                var linePen =
                    new Pen(Color.FromArgb(Next(50) + fixedNumber, Next(50) + fixedNumber, Next(50) + fixedNumber), 1);
                g.DrawArc(linePen, Next(20) - 10, Next(20) - 10, Next(width) + 10, Next(height) + 10, Next(-100, 100),
                          Next(-200, 200));
            }

            Graphics charg = Graphics.FromImage(Charbmp);

            Color[] colors =
            {
                Color.Black, Color.Blue,          Color.Green,  Color.Navy, Color.MediumBlue, Color.Orange,
                Color.Red,   Color.DarkGoldenrod, Color.Maroon, Color.Sienna
            };
            float charx = -18;

            for (int i = 0; i < code.Length; i++)
            {
                M.Reset();
                M.RotateAt(Next(10) - 5, new PointF(Next(3) + 2, Next(3) + 2));

                charg.Clear(Color.Transparent);
                charg.Transform = M;
                //定义前景色为黑色
                drawBrush.Color = colors[Next(9)]; // Color.Black;

                charx = charx + 18 + Next(3);
                var drawPoint = new PointF(charx, 1.0F);
                charg.DrawString(code[i].ToString(CultureInfo.InvariantCulture), Fonts[Next(Fonts.Length - 1)],
                                 drawBrush, new PointF(0, 0));

                charg.ResetTransform();

                g.DrawImage(Charbmp, drawPoint);
            }


            drawBrush.Dispose();
            g.Dispose();
            charg.Dispose();

            verifyimage.Image      = bitmap;
            verifyimage.VerifyCode = code;

            return(verifyimage);
        }
Exemplo n.º 3
0
        public VerifyImageInfo GenerateImage(int len, bool onlyNum)
        {
            var verifyimage = new VerifyImageInfo {
                ImageFormat = ImageFormat.Bmp, ContentType = "image/gif"
            };
            const int width   = 155;
            const int height  = 40;
            var       bgcolor = Color.White;
            var       bitmap  = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var       code    = CreateVerifyCode(len, onlyNum);
            Graphics  g       = Graphics.FromImage(bitmap);

            //var rect = new Rectangle(0, 0, width, height);
            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.Clear(bgcolor);

            //int emSize = Next(3) + 15;//(int)((width - 20) * 2 / text.Length);
            //FontFamily family = fonts[Next(fonts.Length - 1)];
            //Font font = new Font(family, emSize, FontStyle.Bold);

            //SizeF measured = new SizeF(0, 0);
            //SizeF workingSize = new SizeF(width, height);
            //while (emSize > 2 && (measured = g.MeasureString(code, font)).Width > workingSize.Width || measured.Height > workingSize.Height)
            //{
            //    font.Dispose();
            //    font = new Font(family, emSize -= 2);
            //}
            const int fixedNumber = 0;

            var drawBrush = new SolidBrush(Color.FromArgb(Next(100), Next(100), Next(100)));

            for (int x = 0; x < 3; x++)
            {
                var linePen =
                    new Pen(Color.FromArgb(Next(150) + fixedNumber, Next(150) + fixedNumber, Next(150) + fixedNumber), 1);
                g.DrawLine(linePen, new PointF(0.0F + Next(20), 0.0F + Next(height)),
                           new PointF(0.0F + Next(width), 0.0F + Next(height)));
            }


            var m = new Matrix();

            for (int x = 0; x < code.Length; x++)
            {
                m.Reset();
                m.RotateAt(Next(30) - 15, new PointF(Convert.ToInt64(width * (0.10 * x)), Convert.ToInt64(height * 0.5)));
                g.Transform     = m;
                drawBrush.Color = Color.FromArgb(Next(150) + fixedNumber + 20, Next(150) + fixedNumber + 20,
                                                 Next(150) + fixedNumber + 20);
                var drawPoint = new PointF(0.0F + Next(4) + x * 20, 3.0F + Next(3));
                g.DrawString(Next(1) == 1 ? code[x].ToString(CultureInfo.InvariantCulture) : code[x].ToString(CultureInfo.InvariantCulture).ToUpper(),
                             Fonts[Next(Fonts.Length - 1)], drawBrush, drawPoint);
                g.ResetTransform();
            }

            double distort = Next(5, 10) * (Next(10) == 1 ? 1 : -1);

            using (var copy = (Bitmap)bitmap.Clone())
            {
                for (int y = 0; y < height; y++)
                {
                    for (int x = 0; x < width; x++)
                    {
                        int newX = (int)(x + (distort * Math.Sin(Math.PI * y / 84.5)));
                        int newY = (int)(y + (distort * Math.Cos(Math.PI * x / 54.5)));
                        if (newX < 0 || newX >= width)
                        {
                            newX = 0;
                        }
                        if (newY < 0 || newY >= height)
                        {
                            newY = 0;
                        }
                        bitmap.SetPixel(x, y, copy.GetPixel(newX, newY));
                    }
                }
            }

            drawBrush.Dispose();
            g.Dispose();

            verifyimage.Image      = bitmap;
            verifyimage.VerifyCode = code;
            return(verifyimage);
        }