{
private readonly string ImagePath = "../Images/Validator.jpg"
private static string sValidator = ""
private void Page_Load(object sender, System.EventArgs e)
{
if (Request.Params["Validator"] != null)
{
sValidator = Request.Params["Validator"].ToString()
}
///创建Bmp位图
Bitmap bitMapImage = new System.Drawing.Bitmap(Server.MapPath(ImagePath))//从指定的Server.MapPath(ImagePath)路径中获取位图的实例
Graphics graphicImage = Graphics.FromImage(bitMapImage)//从制定的位图中实例中定义Graphics对象
///设置画笔的输出模式
graphicImage.SmoothingMode = SmoothingMode.AntiAlias//竖瞎仔制定消除锯齿的出现
///添加文本字符串
graphicImage.DrawString(sValidator, new Font("Arial", 20, FontStyle.Bold), SystemBrushes.WindowText, new Point(0, 0))
///余汪设置图像输出的格式
Response.ContentType = "image/jpeg"
///保存数据流
bitMapImage.Save(Response.OutputStream, ImageFormat.Jpeg)
///神枯释放占用的资源
graphicImage.Dispose()
bitMapImage.Dispose()
}
}
在 Visual Studio 中设置验证码页面并运行时不显示,纳亏可能是由于以下原因:验证码页面的代码存在错误,导致页面无法正确渲染。请检查代码并尝试修复错误。
验证码页面的布局出现问题,导致验证码无法显示。请检查页面的布局,并确保验证码元素被正确地放置。
验证码图片被阻止显示。这可能是由于安全设置或浏览器插件的问题。尝试检查浏览器的安全设置或禁用插件,然后重新加载页面。
验证码生成的过程中出现了问题,导致验证码无法显示。请检查验证码生成的代码,并确保生成过程正确无误。
如果洞裂神以上的解决方法都无法解决问题,您可以尝试在浏览器中打开开发者工具,查看控制台中是否有任何错误信息。通过这些错误信息,您可以更好地了解问题所在,并尝试解源皮决它。
新建一个专门用来创建验证码图片的页面ValidateCode.aspx它的后台cs文铅枝侍件代码如下:
PageLoad
privatevoid Page_Load(object sender, System.EventArgs e)
{
string checkCode = CreateRandomCode(4)
Session["CheckCode"] = checkCode
CreateImage(checkCode)
}
其中CreateRandomCode是自搭团定义的函数,参数代表验证码位数
privatestring CreateRandomCode(int codeCount)
{
string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"
string[] allCharArray = allChar.Split('槐吵,')
string randomCode = ""
int temp = -1
Random rand = new Random()
for(int i = 0i <codeCounti++)
{
if(temp != -1)
{
rand = new Random(i*temp*((int)DateTime.Now.Ticks))
}
int t = rand.Next(35)
if(temp == t)
{
return CreateRandomCode(codeCount)
}
temp = t
randomCode += allCharArray[t]
}
return randomCode
}
CreateImage也是一个自定义的函数,用于生成图
privatevoid CreateImage(string checkCode)
{
int iwidth = (int)(checkCode.Length * 11.5)
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20)
Graphics g = Graphics.FromImage(image)
Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold)
Brush b = new System.Drawing.SolidBrush(Color.White)
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height)
g.Clear(Color.Blue)
g.DrawString(checkCode, f, b, 3, 3)
Pen blackPen = new Pen(Color.Black, 0)
Random rand = new Random()
for (int i=0i<5i++)
{
int y = rand.Next(image.Height)
g.DrawLine(blackPen,0,y,image.Width,y)
}
System.IO.MemoryStream ms = new System.IO.MemoryStream()
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg)
Response.ClearContent()
Response.ContentType = "image/Jpeg"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
image.Dispose()
}
//g.FillRectangle(new System.Drawing.SolidBrush(Color.Blue),0,0,image.Width, image.Height)
g.Clear(Color.Blue)
这两种方法都可以改变生成图片的背景颜色
下面那个for循环用来生成一些随机的水平线
在需要用到验证码的页面添加一个<asp:Image>控件即可,但是要把ImageUrl指向生成验证码的页面
<asp:Image Runat="server" ID="ImageCheck" ImageUrl="ValidateCode.aspx"></asp:Image>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)