使用js+一般处理程序在静态页面处理带图片的验证码

大雷神 2011-08-09 01:44:55
首先在静态页面里面有一个img(存放验证码) 其中src="HandlerCheck.ashx" ; 在HandlerCheck.ashx中将处理好的 带有随机数字字母的图片返回 HttpContext.Current.Response.ContentType = "image/Png"; HttpContext.Current.Response.BinaryWrite(ms.ToArray()); 能够得到 静态页面里面的Img 可以得到 想要的图片
问题: 随机数写入了图片 怎么在静态页面里面调用 也就是 一般处理程序在返回图片的基础上怎么才能返回随机数
图片与随机数 如何 兼得

<input id="txtcheck" type="text" /><img alt="" src="HandlerCheck.ashx" />

txt里面要输入内容 而随机的内容保存在 img中

补充一点 要静态页面 不要服务端的 例如context.Session["CheckCode"] = CheckCode;

...全文
594 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
慕容枫i 2014-01-24
  • 打赏
  • 举报
回复
楼主解决了吗,怎么做的
Lay 2011-08-09
  • 打赏
  • 举报
回复
学习了
大雷神 2011-08-09
  • 打赏
  • 举报
回复
sorry 用session 半年前就解决了 现在流行全静态页面 网站 和系统 表示压力很大
孟子E章 2011-08-09
  • 打赏
  • 举报
回复
处理程序也可以使用Session啊
必须继承System.Web.SessionState.IRequiresSessionState

public class ajaxTest : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{

context.Response.ContentType = "text/plain";
context.Response.Write(context.Session["s2"]);
}
大雷神 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 net_lover 的回复:]
ajax去验证对比啊
[/Quote]
求大侠明说 一般处理程序返回的是一张图片 不是随机数 在静态页面中 能调用一般处理程序中保存的session吗? 不能吧 。 。。 我调用$.post("一般处理程序",function(response){
//里面的response 是图 而非文字
})
如果再构建一个一般处理程序 保存随机数 又不能与带有随机数的图片保持一致性
茫然ing 用aspx 页面能处理好 可以在后台获取session值进行比较
脑袋被卡主了 转不过来了 。。。。帮忙想想 谢谢了
大雷神 2011-08-09
  • 打赏
  • 举报
回复
恩 做 验证码 静态页面里面 Img 获取 带有随机数的图片 text里面只输入内容 与 写入Img的数字进行比较 问题是 输入的内容 怎么与 图片中内容进行比较
后台获取带有随机数的图片 能够解决
LMAOhuaNL 2011-08-09
  • 打赏
  • 举报
回复
private int codeLen = 4;//验证码长度
private int fineness = 85;//图片清晰度
private int imgWidth = 48;//图片宽度
private int imgHeight = 24;//图片高度
private string fontFamily = "Times New Roman";//字体名称
private int fontSize = 14;//字体大小
private int fontStyle = 0;//字体样式
private int posX = 0;//绘制起始坐标X
private int posY = 0;//绘制坐标Y

private string CreateValidateCode()//生成验证码
{
string validateCode = "";
Random random = new Random();// 随机数对象
for (int i = 0; i < codeLen; i++)//循环生成每位数值
{
int n = random.Next(10);//数字
validateCode += n.ToString();
}
Session["vcode"] = validateCode;//保存验证码
return validateCode;// 返回验证码
}
private void DisturbBitmap(Bitmap bitmap)//图像背景
{
Random random = new Random();//通过随机数生成
for (int i = 0; i < bitmap.Width; i++)//通过循环嵌套,逐个像素点生成
{
for (int j = 0; j < bitmap.Height; j++)
{
if (random.Next(90) <= this.fineness)
bitmap.SetPixel(i, j, Color.LightGray);
}
}
}
private void DrewValidateCode(Bitmap bitmap, string validateCode)//绘制验证码图像
{
Graphics g = Graphics.FromImage(bitmap);//获取绘制器对象
Font font = new Font(fontFamily, fontSize, FontStyle.Bold);//设置绘制字体
g.DrawString(validateCode, font, Brushes.Black, posX, posY);//绘制验证码图像
}
孟子E章 2011-08-09
  • 打赏
  • 举报
回复
ajax去验证对比啊
孟子E章 2011-08-09
  • 打赏
  • 举报
回复
你想在前端进行比较吗?那还要随机数干吗呢?
子夜__ 2011-08-09
  • 打赏
  • 举报
回复
做验证码么?
孟子E章 2011-08-09
  • 打赏
  • 举报
回复
<img alt="" src="HandlerCheck.ashx" />
这就是静态页面的调用啊/
大雷神 2011-08-09
  • 打赏
  • 举报
回复
我的是静态页面 html页面 不是aspx页面 一般处理程序里面写入session 在静态页面怎么调用
大雷神 2011-08-09
  • 打赏
  • 举报
回复
我贴源码:string CheckCode = RandomNum(4);//随机生成4个字符
//把生成的随机字符串保存到Session对象里面去
// context.Session["CheckCode"] = CheckCode;
Random rand = new Random();
int iwidth = (int)(CheckCode.Length * 15);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 22);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);
//画图片的背景噪音线20条
for (int i = 0; i < 20; i++)
{
int x1 = rand.Next(image.Width);
int x2 = rand.Next(image.Width);
int y1 = rand.Next(image.Height);
int y2 = rand.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, x2, y1, y2);
}
//定义颜色
Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
//定义字体
string[] font = { "Verdana", "Microsoft Sans Serif",
             "Comic Sans MS", "Arial", "宋体","新宋体" };

//随机输出噪点
for (int i = 0; i < 50; i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
}

//输出不同字体和颜色的验证码字符
for (int i = 0; i < CheckCode.Length; i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(6);
Font f = new System.Drawing.Font(font[findex], 12, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii = 4;
if ((i + 1) % 2 == 0)
{
ii = 2;
}
g.DrawString(CheckCode.Substring(i, 1), f, b, 3 + (i * 12), ii);
}
//画一个边框
g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
//输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Png";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();

}


public string RandomNum(int n)
{
string strchar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
string[] VcArray = strchar.Split(',');
string VNum = "";
int temp = -1;
Random rand = new Random();
for (int i = 1; i < n + 1; i++)
{
if (temp != -1)
{
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(61);
if (temp != -1 && temp == t)
{
return RandomNum(n);
}
temp = t;
VNum += VcArray[t];
}
return VNum;
将随机的数字 写入图片 返回到了 <img alt="" src="HandlerCheck.ashx" />

问题出来了 验证码:</td>
<td class="style11">
<input id="txtcheck" type="text" /><img alt="" src="HandlerCheck.ashx" />
输入的内容 没办法与 图片比较 怎么解决 ?
孟子E章 2011-08-09
  • 打赏
  • 举报
回复
不明白你啥意思?客户端生成图片?
赢在执行 2011-08-09
  • 打赏
  • 举报
回复
需要使用的页面: <img src="Image.aspx" id="valiCode" alt="验证码" />
下面是产生验证码的后台代码

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
//引用的命名空间
using System.Drawing;
using System.Drawing.Drawing2D;

public partial class Image : System.Web.UI.Page
{
/// <summary>
/// 页面加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
CreateCheckCodeImage(GetExpressions());//页面加载时调用产生算数运算式的方法
}
/// <summary>
/// 产生算术运算式
/// </summary>
private string GetExpressions()
{
Random rd = new Random(); //创建随机数对象
int Results = 0;
int Num1 = rd.Next(10); ;
int Num2 = rd.Next(10); ;
string Expressions = "";
int F = (rd.Next(3) + 1);
switch (F)
{
case 1:
Results = Num1 + Num2;
Expressions = Num1 + " 加上 " + Num2;// +" 结果是" +Results;
break;
case 2:
Results = Num1 - Num2;
Expressions = Num1 + " 减去 " + Num2;
break;
case 3:
Results = Num1 * Num2;
Expressions = Num1 + " 乘以 " + Num2;
break;
case 4:
if (Num2 > 0)
{
Results = Convert.ToInt16(Num1 / Num2);
Expressions = Num1 + " 整除 " + Num2;
}
else
{
Results = Num1;
Expressions = Num1 + " 整除 1";// + Results;
}
break;
}
//验证码值存放到Session中用来比较
Session["Code"] = Results.ToString();
return Expressions;
}
/// <summary>
/// 生成图片(增加背景噪音线、前景噪音点)
/// </summary>
/// <param name="checkCode">随机出字符串</param>
private void CreateCheckCodeImage(string checkCode)
{
if (checkCode.Trim() == "" || checkCode == null)
return;
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)(checkCode.Length * 14), 26);
Graphics g = Graphics.FromImage(image);
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
int i;
for (i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
//定义一个含10种字体的数组
String[] fontFamily = { "Arial", "Verdana", "Comic Sans MS", "Impact", "Haettenschweiler", "幼圆", "黑体", "隶书", "宋体", "楷体_GB2312" };
FontStyle[] fontStyle = { FontStyle.Bold, FontStyle.Italic, FontStyle.Regular, FontStyle.Strikeout, FontStyle.Underline };
Font font = new System.Drawing.Font(fontFamily[random.Next(9)], 12, fontStyle[random.Next(5)]);
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);
g.DrawString(checkCode, font, brush, 2, 2);

//画图片的前景噪音点
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
catch
{
g.Dispose();
image.Dispose();
}
}
}

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧