/// <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(); } } }
/// <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); }
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); }