原来一直没这方面的知识,那个大侠教教我啊~~~~~(我对图形图像处理基础的知识为0)。有下载的地方提供一个也可以,谢谢了!

解决方案 »

  1.   

    類似于csdn的數字驗證么??
    做過,可以發給你。
    [email protected]
      

  2.   

    ASP.NET下的实现,可以参考:
    http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
      

  3.   

    http://singlepine.cnblogs.com/articles/264894.html
      

  4.   

    public byte[] GenerateVerifyImage(int nLen,ref string strKey)
      {
       int nBmpWidth = 13*nLen+5;
       int nBmpHeight = 25;
       System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(nBmpWidth,nBmpHeight);   // 1. 生成随机背景颜色
       int nRed,nGreen,nBlue;  // 背景的三元色
       System.Random rd = new Random((int)System.DateTime.Now.Ticks);
       nRed = rd.Next(255)%128+128;
       nGreen = rd.Next(255)%128+128;
       nBlue = rd.Next(255)%128+128;   // 2. 填充位图背景
       System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp);
       graph.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(nRed,nGreen,nBlue))
        ,0
        ,0
        ,nBmpWidth
        ,nBmpHeight);
       // 3. 绘制干扰线条,采用比背景略深一些的颜色
       int nLines = 3;
       System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(nRed-17,nGreen-17,nBlue-17),2);
       for(int a =0;a< nLines;a++)
       {
        int x1 = rd.Next() % nBmpWidth;
        int y1 = rd.Next() % nBmpHeight;
        int x2 = rd.Next() % nBmpWidth;
        int y2 = rd.Next() % nBmpHeight;
        graph.DrawLine(pen,x1,y1,x2,y2);
       }   // 采用的字符集,可以随即拓展,并可以控制字符出现的几率
       string strCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";     // 4. 循环取得字符,并绘制
       string strResult = "";
       for(int i=0;i<nLen;i++)
       {
        int x = (i*13 + rd.Next(3));
        int y = rd.Next(4) + 1;    // 确定字体
        System.Drawing.Font font = new System.Drawing.Font("Courier New",
         12 + rd.Next()%4,
         System.Drawing.FontStyle.Bold);
        char c = strCode[rd.Next(strCode.Length)];  // 随机获取字符
        strResult += c.ToString();    // 绘制字符
        graph.DrawString(c.ToString(),
         font,
         new SolidBrush(System.Drawing.Color.FromArgb(nRed-60+y*3,nGreen-60+y*3,nBlue-40+y*3)),
         x,
         y);
       }   // 5. 输出字节流
       System.IO.MemoryStream bstream = new System.IO.MemoryStream();
       bmp.Save(bstream,System.Drawing.Imaging.ImageFormat.Jpeg);
       bmp.Dispose();
       graph.Dispose();   strKey = strResult;
       byte[] byteReturn = bstream.ToArray();
       bstream.Close();   return byteReturn;
      }
      

  5.   

    http://blog.csdn.net/chengking/archive/2005/10/07/496615.aspx
      

  6.   

    Imports System
    Imports System.Drawing.Drawing2D
    Imports System.Drawing.imaging
    Imports System.Drawing
    Imports System.Web.UI
    Imports System.IO
    Namespace ValidateNamespace Validate
        Public Class CreatValidateNumberClass CreatValidateNumber
            '生成验证码
            Public Function CreatValidateNumber()Function CreatValidateNumber(ByVal length As Integer) As String
                Dim randNumber() As Integer = New Integer(length) {}
                Dim ValidateNumber() As Integer = New Integer(length) {}
                Dim ValidateNumberStr As String = ""
                Dim seekseek As Integer = CInt(DateTime.Now.Second)
                Dim seekrand As Random = New Random(seekseek)
                Dim beginseek = Int(seekrand.Next(0, Int32.MaxValue - length * 10000))
                Dim seeks() As Integer = New Integer(length) {}
                Dim i As Integer
                '生成起始序列值
                For i = 0 To length - 1
                    beginseek += 10000
                    seeks(i) = beginseek
                Next
                '生成随机数字
                For i = 0 To length - 1
                    Dim rand As Random = New Random(seeks(i))
                    Dim pownum As Integer = 1 * Int(Math.Pow(10, length))
                    randNumber(i) = rand.Next(pownum, Int32.MaxValue)
                Next
                '抽取随机数字
                For i = 0 To length - 1
                    Dim numstr As String = randNumber(i).ToString
                    Dim numlength As Integer = numstr.Length
                    Dim rand As New Random
                    Dim numPosition As Integer = rand.Next(0, numlength - 1)
                    ValidateNumber(i) = Int32.Parse(numstr.Substring(numPosition, 1))
                Next
                '生成验证码
                For i = 0 To length - 1
                    ValidateNumberStr += ValidateNumber(i).ToString
                Next
                Return ValidateNumberStr
            End Function
            '创建验证码图片
            Public Sub CreatevalidateGraphic()Sub CreatevalidateGraphic(ByVal page As Page, ByVal validatenum As String)
                Dim image As Bitmap = New Bitmap(CInt(Math.Ceiling(validatenum.Length * 12.5)), 22)
                Dim g As Graphics = Graphics.FromImage(image)
                Try
                    '生成随机生成器
                    Dim random As New Random
                    '清空图片背景色
                    g.Clear(Color.White)
                    '画图片的干扰线
                    Dim i As Integer
                    For i = 0 To 24
                        Dim x1 As Integer = random.Next(image.Width)
                        Dim x2 As Integer = random.Next(image.Width)
                        Dim y1 As Integer = random.Next(image.Height)
                        Dim y2 As Integer = random.Next(image.Height)
                        g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)
                    Next
                    '画验证码
                    Dim font As Font = New Font("Arial", 12, (FontStyle.Bold And FontStyle.Italic))
                    Dim brush As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)
                    g.DrawString(validatenum, font, brush, 3, 2)
                    '画前景干扰点
                    For i = 0 To 24
                        Dim x As Integer = random.Next(image.Width)
                        Dim y As Integer = random.Next(image.Height)
                        image.SetPixel(x, y, Color.FromArgb(random.Next()))
                    Next
                    '画图片的边框线
                    g.DrawRectangle(New Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1)
                    '保存图片
                    Dim stream As New MemoryStream
                    image.Save(stream, ImageFormat.Jpeg)
                    '输出图片
                    page.Response.Clear()
                    page.Response.ContentType = "image/jpeg"
                    page.Response.BinaryWrite(stream.ToArray())
                Catch ex As Exception
                Finally
                    g.Dispose()
                    image.Dispose()            End Try
            End Sub
        End Class
    End Namespace下面是这个类的引用一个小例子HTML部份:
    DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
        <HEAD>
            <title>WebForm1title>
            <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
            <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
            <meta name="vs_defaultClientScript" content="JavaScript">
            <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        HEAD>
        <body MS_POSITIONING="GridLayout">
            <form id="Form1" method="post" runat="server">
                <FONT face="宋体">FONT>
            form>
        body>
    HTML>程序部份:
    Public Class WebForm1Class WebForm1
        Inherits System.Web.UI.PageWeb 窗体设计器生成的代码#Region " Web 窗体设计器生成的代码 "    '该调用是 Web 窗体设计器所必需的。
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()    End Sub    '注意: 以下占位符声明是 Web 窗体设计器所必需的。
        '不要删除或移动它。
        Private designerPlaceholderDeclaration As System.Object    Private Sub Page_Init()Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
            'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
            '不要使用代码编辑器修改它。
            InitializeComponent()
        End Sub#End Region
        Public validates As New Validate.CreatValidateNumber
        Public vali As String
        Private Sub Page_Load()Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码        vali = validates.CreatValidateNumber(5)
            'validate.CreatevalidateGraphic(Me, vali)
        End SubEnd Class