1. using System;
    2. using System.Collections;
    3. using System.Collections.Generic;
    4. using System.Drawing;
    5. using System.Drawing.Imaging;
    6. using System.Linq;
    7. using System.Web;
    8. using System.Web.SessionState;
    9. namespace XXX.Service
    10. {
    11. public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间
    12. {
    13. public void ProcessRequest(HttpContext context)
    14. {
    15. string checkCode = GenCode(5); // 产生5位随机字符
    16. context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
    17. System.Drawing.Bitmap image = new System.Drawing.Bitmap(80, 30);
    18. Graphics g = Graphics.FromImage(image);
    19. System.IO.MemoryStream ms = new System.IO.MemoryStream();
    20. try
    21. {
    22. //生成随机生成器
    23. Random random = new Random();
    24. //清空图片背景色
    25. g.Clear(Color.White);
    26. // 画图片的背景噪音线
    27. int i;
    28. for (i = 0; i < 25; i++)
    29. {
    30. int x1 = random.Next(image.Width);
    31. int x2 = random.Next(image.Width);
    32. int y1 = random.Next(image.Height);
    33. int y2 = random.Next(image.Height);
    34. g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
    35. }
    36. Font font = new System.Drawing.Font("微软雅黑", 12, (System.Drawing.FontStyle.Bold));
    37. System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
    38. g.DrawString(checkCode, font, brush, 2, 2);
    39. //画图片的前景噪音点
    40. g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
    41. image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    42. }
    43. finally
    44. {
    45. g.Dispose();
    46. image.Dispose();
    47. }
    48. context.Response.ClearContent();
    49. context.Response.ContentType = "image/jpeg";
    50. context.Response.BinaryWrite(ms.ToArray());
    51. context.Response.AddHeader("Access-Control-Allow-Origin", "*");
    52. }
    53. /// <summary>
    54. /// 产生随机字符串
    55. /// </summary>
    56. /// <param name="num">随机出几个字符</param>
    57. /// <returns>随机出的字符串</returns>
    58. private string GenCode(int num)
    59. {
    60. string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    61. char[] chastr = str.ToCharArray();
    62. string code = "";
    63. Random rd = new Random();
    64. int i;
    65. for (i = 0; i < num; i++)
    66. {
    67. code += str.Substring(rd.Next(0, str.Length), 1);
    68. }
    69. return code;
    70. }
    71. public bool IsReusable
    72. {
    73. get
    74. {
    75. return false;
    76. }
    77. }
    78. }
    79. }