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
生成图片验证码,请指教!