using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Drawing;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class utils_showImage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        // 创建一个包含随机内容的验证码文本
        System.Random rand = new Random();
        int len = rand.Next(2,4);
        char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
        System.Text.StringBuilder myStr = new System.Text.StringBuilder();
        for (int iCount = 0; iCount < len; iCount++)
        {
            myStr.Append(chars[rand.Next(chars.Length)]);
        }
        string text = myStr.ToString();
        // 保存验证码到 session 中以便其他模块使用
        this.Session["checkcode"] = text;
        Size ImageSize = Size.Empty;
        Font myFont = new Font("MS Sans Serif", 18);
        // 计算验证码图片大小
        using (Bitmap bmp = new Bitmap(10, 10))
        {
            using (Graphics g = Graphics.FromImage(bmp))
            {
                SizeF size = g.MeasureString(text, myFont, 10000);
                ImageSize.Width = (int)size.Width + 8;
                ImageSize.Height = (int)size.Height + 8;
            }
        }
        // 创建验证码图片
        using (Bitmap bmp = new Bitmap(ImageSize.Width, ImageSize.Height))
        {
            // 绘制验证码文本
            using (Graphics g = Graphics.FromImage(bmp))
            {
                g.Clear(Color.White);
                using (StringFormat f = new StringFormat())
                {
                    f.Alignment = StringAlignment.Near;
                    f.LineAlignment = StringAlignment.Center;
                    f.FormatFlags = StringFormatFlags.NoWrap;
                    g.DrawString(
                        text,
                        myFont,
                        Brushes.Black,
                        new RectangleF(
                        0,
                        0,
                        ImageSize.Width,
                        ImageSize.Height),
                        f);
                }//using
            }//using
            // 制造噪声 杂点面积占图片面积的 30%
            int num = ImageSize.Width * ImageSize.Height * 30 / 100;
            for (int iCount = 0; iCount < num; iCount++)
            {
                // 在随机的位置使用随机的颜色设置图片的像素
                int x = rand.Next(ImageSize.Width);
                int y = rand.Next(ImageSize.Height);
                int r = rand.Next(255);
                int g = rand.Next(255);
                int b = rand.Next(255);
                Color c = Color.FromArgb(r, g, b);
                bmp.SetPixel(x, y, c);
            }//for
            // 输出图片
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            this.Response.ContentType = "image/png";
            ms.WriteTo(this.Response.OutputStream);
            ms.Close();
        }//using
        myFont.Dispose();
    }
    /// 
    /// 检查指定的文本是否匹配验证码
    /// 
    /// 要判断的文本
    /// 是否匹配
    public static bool CheckCode(string text)
    {
        string txt = System.Web.HttpContext.Current.Session["checkcode"] as string;
        return text == txt;
    }
}