verifyimage.aspx.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Drawing;
  3. using CB.Common;
  4. namespace CB.Admin
  5. {
  6. public partial class verifyimage : System.Web.UI.Page
  7. {
  8. protected void Page_Load(object sender, EventArgs e)
  9. {
  10. string code = Utils.GetRandomInt();
  11. Utils.WriteCookie("ducenter-code", XXTEA.Encode(code), 5);
  12. CreateImage(code);
  13. }
  14. #region 生成图片验证码
  15. private void CreateImage(string code)
  16. {
  17. if (string.IsNullOrEmpty(code))
  18. code = "鬼子";
  19. int randAngle = 45; //随机转动角度
  20. int mapwidth = (int)(code.Length * 16);
  21. Bitmap map = new Bitmap(mapwidth, 26);//创建图片背景
  22. Graphics graph = Graphics.FromImage(map);
  23. graph.Clear(Color.AliceBlue);//清除画面,填充背景
  24. graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框
  25. //graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
  26. Random rand = new Random();
  27. //背景噪点生成
  28. Pen blackPen = new Pen(Color.LightGray, 0);
  29. for (int i = 0; i < 50; i++)
  30. {
  31. int x = rand.Next(0, map.Width);
  32. int y = rand.Next(0, map.Height);
  33. graph.DrawRectangle(blackPen, x, y, 1, 1);
  34. }
  35. //验证码旋转,防止机器识别
  36. char[] chars = code.ToCharArray();//拆散字符串成单字符数组
  37. //文字距中
  38. StringFormat format = new StringFormat(StringFormatFlags.NoClip);
  39. format.Alignment = StringAlignment.Center;
  40. format.LineAlignment = StringAlignment.Center;
  41. //定义颜色
  42. Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
  43. //定义字体
  44. string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
  45. for (int i = 0; i < chars.Length; i++)
  46. {
  47. int cindex = rand.Next(7);
  48. int findex = rand.Next(5);
  49. Font f = new System.Drawing.Font(font[findex], 12, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
  50. Brush b = new System.Drawing.SolidBrush(c[cindex]);
  51. Point dot = new Point(13, 13);
  52. //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的
  53. float angle = rand.Next(-randAngle, randAngle);//转动的度数
  54. graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
  55. graph.RotateTransform(angle);
  56. graph.DrawString(chars[i].ToString(), f, b, 0, 0, format);
  57. //graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format);
  58. graph.RotateTransform(-angle);//转回去
  59. graph.TranslateTransform(1, -dot.Y);//移动光标到指定位置
  60. }
  61. //graph.DrawString(randomcode,fontstyle,new SolidBrush(Color.Blue),2,2); //标准随机码
  62. //生成图片
  63. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  64. map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
  65. Response.ClearContent();
  66. Response.ContentType = "image/gif";
  67. Response.BinaryWrite(ms.ToArray());
  68. graph.Dispose();
  69. map.Dispose();
  70. }
  71. #endregion
  72. }
  73. }