随机生成图片

时间:2023-02-09 21:17:52

转载出处:http://blog.csdn.net/loverszhaokai/archive/2010/10/04/5921139.aspx

/////////////////////////////////////////////////////////////////////////////////////////
//如果想进行登陆的时候验证。只要判断用户输入的数据是否和Session[“Validate”]相等就行了//
////////////////////////////////////////////////////////////////////////////////////////
01.using System;  
02.using System.Drawing;  
03.public partial class 生成随机图片 : System.Web.UI.Page  
04.{  
05.    //生成随机图片背景  
06.    protected void CreateImageM(string validateCode)  
07.    {  
08.        //图像的宽度,与验证码的长度成一定比例  
09.        int iwidth = (int)(validateCode.Length * 11.5);  
10.        //创建一个长20,宽iwidth的图像对象  
11.        System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth,20);  
12.        //创建一个新绘图对象  
13.        Graphics g = Graphics.FromImage(image);  
14.        //绘图用的字体和字号  
15.        Font f = new System.Drawing.Font("Arial",10,System.Drawing.FontStyle.Bold);  
16.        //绘图用的刷子的大小  
17.        Brush b = new System.Drawing.SolidBrush(Color.White);  
18.        //清除背景色,并且以深橄榄色填充  
19.        g.Clear(Color.DarkOliveGreen);  
20.        //格式化刷子的属性,用指定的刷子、颜色等在指定的范围内画图  
21.        g.DrawString(validateCode,f,b,3,3);  
22.        //创建铅笔对象  
23.        Pen blackPen = new Pen(Color.Black,0);  
24.        //创建随机对象  
25.        Random rand = new Random();  
26.        //随机画线  
27.        for (int i = 0; i < 5; i++)  
28.        {  
29.            int y = rand.Next(image.Height);  
30.            //用指定的铅笔画线,粗细由参数决定  
31.            g.DrawLine(blackPen,0,y,image.Width,y);  
32.        }  
33.        //输出绘图  
34.        System.IO.MemoryStream ms = new System.IO.MemoryStream();  
35.        //将图像保存到指定的流  
36.        image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);  
37.        Response.ClearContent();  
38.        //配置输出类型  
39.        Response.ContentType = "Image/Jpeg";  
40.        //输入内容  
41.        Response.BinaryWrite(ms.ToArray());  
42.        //清空不需要的资源  
43.        g.Dispose();  
44.        image.Dispose();  
45.    }  
46.    //生成随机字符的方法  
47.    protected string CreateValidate(int count)  
48.    {  
49.        string allchar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";  
50.        //将验证码中所有的字符保存在一个字符串数组中  
51.        string[] allchararray = allchar.Split(',');  
52.        //初始化一个随机数  
53.        string randomcode = "";  
54.        int temp = -1;  
55.        //生成一个随机对象  
56.        Random rand = new Random();  
57.        //根据验证码的位数循环  
58.        for (int i = 0; i < count; i++)  
59.        {  
60.            //主要是防止生成相同的验证码  
61.            if (temp != -1)  
62.            {  
63.                //加入时间的刻度  
64.                rand = new Random(i*temp*((int)DateTime.Now.Ticks));  
65.            }  
66.            int t = rand.Next(35);  
67.            if (temp == t)  
68.            {  
69.                //相等的话重新生成  
70.                return CreateValidate(count);  
71.            }  
72.            temp = t;  
73.            randomcode += allchararray[t];   
74.        }  
75.        //在session中保存随机验证码  
76.            Session["Valid"] = randomcode;  
77.            //返回生成的随机字符  
78.            return randomcode;  
79.    }  
80.    protected void Page_Load(object sender, EventArgs e)  
81.    {  
82.        CreateImageM(CreateValidate(8));  
83.    }  
84.}