水印
创建项目,创建前端网页
创建一个项目:在其中创建一个WebForm:WebForm1.aspx 页面
为了方便看效果我们就在页面上放两个img来显示图片,代码如下:
<body>
<form id="form1" runat="server">
<div>
<img src="images/54.jpg"/>
<img src="images/53.jpg"/>
</div>
</form>
</body>
创建HttpHandle类
接下来,创建一个HttpHandle类,并实现IHttpHandle接口,代码如下:
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
//获取源文件物理路径
string url = context.Request.PhysicalPath;
//创建画板
Bitmap bitm = new Bitmap(url);
//拿到画笔
Graphics g =Graphics.FromImage(bitm);
//作画 Font字体样式,Brushes 刷子颜色 Point坐标30是X轴,5是Y轴
g.DrawString("斗地主",new Font("宋体",20,FontStyle.Bold),Brushes.Red,new Point(30,5));
//立即执行
g.Flush();
//返回画好的图片
bitm.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);
}
配置Web.config
写完HttpHandle类后要记得配置Web.config文件,要不然无效,代码如下:
<system.webServer>
<handlers>
<add verb="*" name="c1" path="images/*.jpg" type="WebApplication1.Class1"/>
</handlers>
</system.webServer>
以下就是我的效果图:
验证码
创建项目,创建前端网页
在原项目中创建一个WebForm:WebForm2.aspx 页面
前端代码如下:
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="请输入验证码"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Image ID="Image1" runat="server" ImageUrl="~/Handler1.ashx"/>
<asp:Button ID="Button1" runat="server" Text="验证" OnClick="Button1_Click" />
<asp:Label ID="Label2" runat="server" ForeColor="red"></asp:Label>
</div>
</form>
</body>
这里Image标签的ImagesUrl引入HttpHandler类就可以了,系统运行到这里会调用HttpHandler类处理。
右键项目>添加>新建项目>Web选项下面(或者Web的常规选项)>一般处理程序>添加
这也是HttpHandle类,配置文件系统会配置好
类文件代码如下:
//生成随机数
private Random random = new Random();
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
//定义验证码数据源
string[] str = {"1","2","3","4","5","6","7","8","9","0","q","w","e","r","t","y"
,"u","i","o","p","a","s","d","f","g","h","j","k","l","z","x","c","v","b","n","m","Q","W","E","R","T","Y"
,"U","I","O","P","A","S","D","F","G","H","J","K","L","Z","X","C","V","B","N","M"
};
//声明装字符的变量
String numstr = null;
//获取四个随机加载的字符
for (int i = 1; i < 5; i++)
{
numstr += str[random.Next(0, str.Length)];
}
context.Session["code"] = numstr;//保存到session中,整个网站中都能访问到,退出清除,重新生成
Create(context, numstr);
}
public void Create(HttpContext context, string code)
{
//定义宽度 code是验证码的长度
int cwidth = (int)(code.Length * 30);
//创建一个画板,设置宽高
Bitmap bitmap = new Bitmap(cwidth, 50);
//拿到画笔
Graphics g = Graphics.FromImage(bitmap);
//定义颜色
Color[] colors = { Color.Red, Color.Blue, Color.Cyan, Color.Yellow };
//定义字体格式
string[] font = { "隶书", "宋体", "Arial", "微软雅黑" };
Random rand = new Random();//随机数
//生成随机噪点
for (int i = 1; i <= code.Length; i++)
{
int x = rand.Next(bitmap.Width);
int y = rand.Next(bitmap.Height);
g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
}
//输出不同字体颜色的验证码字符
for (int i = 0; i < code.Length; i++)
{
int xx = rand.Next(4);
int yy = rand.Next(4);
Font f = new Font(font[xx], 30, FontStyle.Bold);
Brush b = new SolidBrush(colors[yy]);
int ii = 4;
if ((i + 1) % 2 == 0)
{
ii = 2;
}
g.DrawString(code[i].ToString(), f, b, (i * 27), ii);
}
//画个边框
g.DrawRectangle(new Pen(ColorTranslator.FromHtml("#CCCCCC"), 0), 0, 0, bitmap.Width - 1, bitmap.Height - 1);
//返回客户端
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
下面是我的运行结果:
后端代码:
protected void Button1_Click(object sender, EventArgs e)
{
if (Session["code"].ToString() == TextBox1.Text)
{
Label2.Text = "验证成功";
Image1.ImageUrl = "";
}
else
{
Label2.Text = "验证码不匹配";
}
}
执行效果:
验证码成功后隐藏了验证码的输出地址
以上就是我本次的全部内容,希望能够帮助到大家~
如果哪里有不对的地方请随时联系我,我会加以改正~