Imports
System
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO
Imports System.Drawing
' 生成图片验证码类
Public Class CreateImage
Public Sub CreateImage()
End Sub
Public Shared Sub DrawImage()
Dim img As CreateImage = New CreateImage()
HttpContext.Current.Session( " CheckCode " ) = Global.CreateImage.RndNum( 4 )
Global.CreateImage.CreateImages(HttpContext.Current.Session( " CheckCode " ).ToString())
End Sub
' '' <summary>
' '' 生成验证图片
' ''</summary>
' ''<param name="checkCode">验证字符</param>
Public Shared Sub CreateImages( ByVal checkCode As String )
Dim iwidth As Integer = CType (checkCode.Length * 13 , Integer )
Dim image As System.Drawing.Bitmap = New System.Drawing.Bitmap(iwidth, 25 )
Dim g As Graphics = Graphics.FromImage(image)
g.Clear(Color.White)
' 定义颜色
Dim c As Color() = {Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple}
' 定义字体
Dim font As String () = { " Verdana " , " Microsoft Sans Serif " , " Comic Sans MS " , " Arial " , " 宋体 " }
Dim rand As Random = New Random()
Dim i As Integer = 0
Do While i < 50
Dim x As Integer = rand.Next(image.Width)
Dim y As Integer = rand.Next(image.Height)
g.DrawRectangle( New Pen(Color.LightGray, 0 ), x, y, 1 , 1 )
i += 1
Loop
i = 0
Do While i < checkCode.Length
Dim cindex As Integer = rand.Next( 7 )
Dim findex As Integer = rand.Next( 5 )
Dim f As Font = New System.Drawing.Font(font(findex), 10 , System.Drawing.FontStyle.Bold)
Dim b As Brush = New System.Drawing.SolidBrush(c(cindex))
Dim ii As Integer = 4
If (i + 1 ) Mod 2 = 0 Then
ii = 2
End If
g.DrawString(checkCode.Substring(i, 1 ), f, b, 3 + (i * 12 ), ii)
i += 1
Loop
' 画一个边框
g.DrawRectangle( New Pen(Color.Black, 0 ), 0 , 0 , image.Width - 1 , image.Height - 1 )
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream()
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.ContentType = " image/Jpeg "
HttpContext.Current.Response.BinaryWrite(ms.ToArray())
g.Dispose()
image.Dispose()
End Sub
' '' <summary>
' '' 生成随机的字母
' '' </summary>
' '' <param name="VcodeNum">生成字母的个数</param>
' '' <returns>string</returns>
Public Shared Function RndNum( ByVal VcodeNum As Integer ) As String
Dim allChar As String = " 0,1,2,3,4,5,6,7,8,9 "
Dim allCharArray() As String = allChar.Split( " , " )
Dim randomCode As String = ""
Dim temp As Integer = - 1
Dim rand As Random = New Random
Dim i As Integer = 0
Do While (i < VcodeNum)
If (temp <> - 1 ) Then
Dim aa As Integer = CType (DateTime.Now.Ticks Mod System.Int32.MaxValue, Integer ) ' 根据时间生成随机数种子
rand = New Random(aa)
End If
Dim t As Integer = rand.Next( 61 ) + 1
If t > allCharArray.Length - 1 Then t = allCharArray.Length - 1
If temp = t Then ' 抑制产生连续重复的验证码。
i -= 1
randomCode = Microsoft.VisualBasic.Left(randomCode, i)
End If
temp = t
randomCode = randomCode + allCharArray(t)
i += 1
Loop
Return randomCode
End Function
End Class
Imports System.Data
Imports System.Configuration
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Imports System.IO
Imports System.Drawing
' 生成图片验证码类
Public Class CreateImage
Public Sub CreateImage()
End Sub
Public Shared Sub DrawImage()
Dim img As CreateImage = New CreateImage()
HttpContext.Current.Session( " CheckCode " ) = Global.CreateImage.RndNum( 4 )
Global.CreateImage.CreateImages(HttpContext.Current.Session( " CheckCode " ).ToString())
End Sub
' '' <summary>
' '' 生成验证图片
' ''</summary>
' ''<param name="checkCode">验证字符</param>
Public Shared Sub CreateImages( ByVal checkCode As String )
Dim iwidth As Integer = CType (checkCode.Length * 13 , Integer )
Dim image As System.Drawing.Bitmap = New System.Drawing.Bitmap(iwidth, 25 )
Dim g As Graphics = Graphics.FromImage(image)
g.Clear(Color.White)
' 定义颜色
Dim c As Color() = {Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple}
' 定义字体
Dim font As String () = { " Verdana " , " Microsoft Sans Serif " , " Comic Sans MS " , " Arial " , " 宋体 " }
Dim rand As Random = New Random()
Dim i As Integer = 0
Do While i < 50
Dim x As Integer = rand.Next(image.Width)
Dim y As Integer = rand.Next(image.Height)
g.DrawRectangle( New Pen(Color.LightGray, 0 ), x, y, 1 , 1 )
i += 1
Loop
i = 0
Do While i < checkCode.Length
Dim cindex As Integer = rand.Next( 7 )
Dim findex As Integer = rand.Next( 5 )
Dim f As Font = New System.Drawing.Font(font(findex), 10 , System.Drawing.FontStyle.Bold)
Dim b As Brush = New System.Drawing.SolidBrush(c(cindex))
Dim ii As Integer = 4
If (i + 1 ) Mod 2 = 0 Then
ii = 2
End If
g.DrawString(checkCode.Substring(i, 1 ), f, b, 3 + (i * 12 ), ii)
i += 1
Loop
' 画一个边框
g.DrawRectangle( New Pen(Color.Black, 0 ), 0 , 0 , image.Width - 1 , image.Height - 1 )
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream()
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
HttpContext.Current.Response.ClearContent()
HttpContext.Current.Response.ContentType = " image/Jpeg "
HttpContext.Current.Response.BinaryWrite(ms.ToArray())
g.Dispose()
image.Dispose()
End Sub
' '' <summary>
' '' 生成随机的字母
' '' </summary>
' '' <param name="VcodeNum">生成字母的个数</param>
' '' <returns>string</returns>
Public Shared Function RndNum( ByVal VcodeNum As Integer ) As String
Dim allChar As String = " 0,1,2,3,4,5,6,7,8,9 "
Dim allCharArray() As String = allChar.Split( " , " )
Dim randomCode As String = ""
Dim temp As Integer = - 1
Dim rand As Random = New Random
Dim i As Integer = 0
Do While (i < VcodeNum)
If (temp <> - 1 ) Then
Dim aa As Integer = CType (DateTime.Now.Ticks Mod System.Int32.MaxValue, Integer ) ' 根据时间生成随机数种子
rand = New Random(aa)
End If
Dim t As Integer = rand.Next( 61 ) + 1
If t > allCharArray.Length - 1 Then t = allCharArray.Length - 1
If temp = t Then ' 抑制产生连续重复的验证码。
i -= 1
randomCode = Microsoft.VisualBasic.Left(randomCode, i)
End If
temp = t
randomCode = randomCode + allCharArray(t)
i += 1
Loop
Return randomCode
End Function
End Class
生成图片验证码,请指教!