水印制作
创建IHttpHandler接口
public class HttpHandler : IHttpHandler
{
public bool IsReusable => throw new NotImplementedException();
public void ProcessRequest(HttpContext context)
{
throw new NotImplementedException();
}
}
编写水印代码
详细请看注释
public class HttpHandler : IHttpHandler
{
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
//创建一个画板,把获取到的图片放到画板上
Bitmap bitmap = new Bitmap(context.Request.PhysicalPath);
//创建画笔,准备在画板是绘画
Graphics graphics = Graphics.FromImage(bitmap);
//获取水印图片
Image image = Image.FromFile(context.Server.MapPath("shui.png"));
//水印图片放置的位置,用画板的宽高减去水印图片的宽高看水印图片位置是否合适不合适自己调节
graphics.DrawImage(image, new Point(bitmap.Width-image.Width+10, bitmap.Height - image.Height+10));
//清除画笔
graphics.Flush();
//将图片存为输出流
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
//把图片输出至浏览器
context.Response.WriteFile(context.Request.PhysicalPath);
}
}
配置配置文件
在configuration节点下编写
<system.webServer>
<handlers>
<add verb="*" path="images/*" type="水印.HttpHandler" name="sy"/>
</handlers>
</system.webServer>
创建两个web窗体
放入两个图片标签,写入路径(使用服务器控件也行)
<form id="form1" runat="server">
<div>
<img src="images/cdf.jpg" />
<img src="images/cdf.jpg" />
</div>
</form>
最终实现页面
验证码图制作
创建IHttpHandler接口(同水印接口一样)
编写验证码代码
详细请看注释
public class Class1 : IHttpHandler,IRequiresSessionState
{
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
//创建一个宽300,高100的的画板
Bitmap bitmap = new Bitmap(300,100);
//创建画笔准备在画板上写验证码
Graphics graphics = Graphics.FromImage(bitmap);
//随机生成数
Random random = new Random();
//在这些里面随机生成一个五位数的验证码
string sj ="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
//给每一个验证码随机生成字体
string[] zt = new string[] { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
//创建一个字符类型接收每一个验证码
char sui ;
//创建一个string类型把所有验证码整合
string suij="";
//创建一个string类型接收一个随机生成的字体
string font = "";
//创建一个Brush数组随机生成颜色
Brush[] ys = new Brush[]{ Brushes.Blue, Brushes.Yellow, Brushes.Pink, Brushes.Red, Brushes.Green, Brushes.Orange, Brushes.Purple };
//清除背景颜色,新建一个背景色
graphics.Clear(Color.DarkGray);
for (int i = 0; i < 5; i++)
{
//随机生成一个数,给到y轴位置
int FWY = random.Next(1, 50);
//随机生成一个数,给到x轴位置,由于有顺序创建五个随机数不打乱顺序
int fwX1 = random.Next(1, 50);
int fwX2 = random.Next(55, 100);
int fwX3 = random.Next(105, 150);
int fwX4 = random.Next(155, 200);
int fwX5 = random.Next(205, 255);
//接收字体生成的随机数
font = zt[random.Next(i, zt.Length)];
//接收随机生成数
sui = sj[random.Next(i, sj.Length)];
//把随机生成数整合
suij += sui;
//判断循环数让每一个验证码都有随机生成的样式
if (i == 0)
{
//画笔开始画验证码
graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX1, FWY));
}
else if (i == 1)
{
graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX2, FWY));
}
else if (i == 2)
{
graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX3, FWY));
}
else if (i == 3)
{
graphics.DrawString(sui.ToString(), new Font(font, 30, FontStyle.Bold), ys[random.Next(0, ys.Length)], new Point(fwX4, FWY));
}
else if (i == 4)
{
graphics.DrawString(sui.ToString(), new Font(font, 30), ys[random.Next(0, ys.Length)], new Point(fwX5, FWY));
}
//随机生成噪点
for (int j = 0; j < 50; j++)
{
int x = random.Next(bitmap.Width);
int y = random.Next(bitmap.Height);
graphics.DrawRectangle(new Pen(ys[random.Next(0, ys.Length)], 0), x, y, 1, 1); }
}
//把整合验证码放入session,为了方便验证(验证还未写)
context.Session["sjs"] = suij;
//清除画笔
graphics.Flush();
//把图片存为输出流,返回至客户端
bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}