生成带随机数的图像






4.31/5 (8投票s)
2006年11月29日
2分钟阅读

87285

732
生成一个带有随机代码的图像,用于用户身份验证。
引言
我们需要检查注册我们网站的是否是真实用户。因此,我们决定生成一个带有随机代码的图像,该代码对机器人隐藏,并将其馈送到浏览器而不是页面响应。我们在注册表单中显示它,并让用户输入代码进行验证。
创建 Web 项目
- 文件 -> 新建 -> 新项目
创建一个新的 CodeImage Visual Basic ASP.NET Web 应用程序。
修改 Web 表单
-
将 WebForm1.aspx 重命名为 CodeImage.aspx。打开它。
-
切换到 HTML 视图(右键单击 -> 查看 HTML 源代码)。
-
删除所有 HTML 代码。仅保留
<%@ Page ... %>
头部。 -
切换到代码视图(右键单击 -> 查看代码)。
修改 Page_Load
方法,添加生成随机代码图像的代码。同时设置 Session("hiddenCode")
以便稍后进行代码检查
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
' Create a Bitmap image
Dim ImageSrc As System.Drawing.Bitmap = _
New System.Drawing.Bitmap(155, 85)
' Fill it randomly with white pixels
For iX As Integer = 0 To ImageSrc.Width - 1
For iY As Integer = 0 To ImageSrc.Height - 1
If Rnd() > 0.5 Then
ImageSrc.SetPixel(iX, iY, System.Drawing.Color.White)
End If
Next iY
Next iX
' Create an ImageGraphics Graphics object from bitmap Image
Dim ImageGraphics As System.Drawing.Graphics = _
System.Drawing.Graphics.FromImage(ImageSrc)
' Generate random code.
Dim hiddenCode As String = (Fix(Rnd() * 10000000)).ToString
' Set Session variable
Session("hiddenCode") = hiddenCode
' Draw random code within Image
Dim drawFont As New System.Drawing.Font("Arial", _
20, FontStyle.Italic)
Dim drawBrush As New _
System.Drawing.SolidBrush(System.Drawing.Color.Black)
Dim x As Single = 5.0 + (Rnd() / 1) * (ImageSrc.Width - 120)
Dim y As Single = 5.0 + (Rnd() / 1) * (ImageSrc.Height - 30)
Dim drawFormat As New System.Drawing.StringFormat
ImageGraphics.drawString(hiddenCode, drawFont, drawBrush, _
x, y, drawFormat)
' Change reponse content MIME type
Response.ContentType = "image/jpeg"
' Sent Image using Response OutputStream
ImageSrc.Save(Response.OutputStream, _
System.Drawing.Imaging.ImageFormat.Jpeg)
' Dispose Objects used
drawFont.Dispose()
drawBrush.Dispose()
ImageGraphics.Dispose()
End Sub
构建解决方案 (F7),并运行应用程序 (F5)。
创建检查表单。
-
创建一个新的 Default.aspx Web 表单(右键单击 CodeImage 项目 -> 添加 -> 添加 Web 表单)。
-
右键单击 Default.aspx -> 设置为启动页。打开它。
-
从 IDE 菜单中,单击“视图” -> “工具箱”。从 HTML 选项卡中,将一个
Image
控件拖动到表单上。右键单击Image
-> 属性。将图像源设置为 "CodeImage.aspx"。将备用文本设置为 "隐藏代码"。单击“应用”。单击“确定”。 -
从 HTML 选项卡中,将一个
Label
控件拖动到表单上。双击它。将文本更改为 "请输入图像中的代码:"。 -
从 Web Forms 选项卡中,将一个
TextBox
控件拖动到表单上。 -
从 Web Forms 选项卡中,将一个
Button
控件拖动到表单上。 -
从 Web Forms 选项卡中,将一个
Label
控件拖动到表单上。右键单击 -> 属性。将Text
属性设置为Nothing
。
双击 Button1
按钮控件,并修改 Button1_Click
代码为
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text <> Session("hiddenCode") Then
Label1.Text = "Wrong Code!"
Else
Label1.Text = "Correct Code!"
End If
End Sub
构建并运行 Web 应用程序 (F7) (F5)。
关注点
就是这样!
历史
刚刚发布。