创建验证码图片

说到验证码,以前看到手机上面要用到验证码的时候,为什么有那么多干扰线,怎么生成的,现在老师上课讲了之后知道了。
 首先,想要验证码的图片,我们肯定要创建图片才能有

//新增图片  byte[]:数组 二进制
Bitmap newBitmap = new Bitmap(strRandom.Length * 20, 38);

 然后创建了图片,里面的线条肯定要用一支笔来画才行,

//绘画纸张的笔
Graphics g = Graphics.FromImage(newBitmap);

 图片跟笔有了,然后图片背景要绘画成白色的背景图,而这个纸默认为空白

//默认为空的纸,绘画成白色背景的图
g.Clear(Color.White);

 背景画完了,然后就到字体颜色了,字体颜色可以自己设置,不一定指定是为红色的字体颜色

//在图片上绘制文字  红色的文字颜色 Color.Red
SolidBrush solidBrush = new SolidBrush(Color.Red);

 字体颜色设置好了,就设置一下字体类型,就是用什么字体,还有字体要多大,都可以自己设置,然后固定一下位置,把X坐标,Y坐标写上,固定在图片里面的范围

//什么字体,多大("Aril", 18);x坐标,y坐标(12, 4)
g.DrawString(strRandom, new Font("Aril", 18), solidBrush, 12, 4);

 其实我们看到的验证码上面通常都会有干扰线,但是这干扰线不是用来干扰用户的,而是用来干扰机器的,干扰线主要是用于干扰机器登录

 //在图片上绘制干扰线  干扰机器登录,防止机器登录
 Random random = new Random();

 循环一下图片大小,然后在图片大小的范围内随机产生线条,并且把线条绘制到画布上面,但在画完线的时候定义一下线的起点;画完线就要画一下图片的前景干扰的点,用以干扰机器,然后随机产生一个颜色,使图片不那么容易被看清楚里面的内容

  for (int i = 0; i < 10; i++)
            {
                //随机 产生一条线,并绘制到画布。 起始点(x,y)  总结点
                int x1 = random.Next(newBitmap.Width);
                int y1 = random.Next(newBitmap.Height);
                int x2 = random.Next(newBitmap.Width);
                int y2 = random.Next(newBitmap.Height);
                //画线
                g.DrawLine(new Pen(Color.DarkGray), x1, y1, x2, y2);
            }
            //绘制图片的前景干扰的点
            for (int i = 0; i < 100; i++)
            {
                int x = random.Next(newBitmap.Width);
                int y = random.Next(newBitmap.Height);
                //通过随机数再随机产生一个颜色
                newBitmap.SetPixel(x, y, Color.FromArgb(random.Next()));
            }

 然后就要在图片最外边画一个边框,这个边框包裹着图片以及图片里面的内容,指定一下边框的类型为矩形

//在最外边绘制边框,包裹住画图  指定矩形
            g.DrawRectangle(new Pen(Color.Blue), 0, 0, newBitmap.Width, newBitmap.Height);
            g.DrawRectangle(new Pen(Color.Blue), -1, -1, newBitmap.Width, newBitmap.Height);

 最后一步是讲图片保存到内存流中去,并且返回

   //将图转保存到内存流中
            MemoryStream ms = new MemoryStream();
            newBitmap.Save(ms, ImageFormat.Jpeg);
   //将流内容写入byte数组返回
        return ms.ToArray();

全部制作完了之后的效果图:
在这里插入图片描述
简单点说就是画一幅画,画里面就是数字跟字母组成的,再多一点就是有干扰线,这画画肯定得有画笔,然后就得有画板,然后肯定得有图纸,有了图纸就还要有颜料,把字涂上颜色,不然图纸是白色的,然后文字也是白色的,那些出来的文字都看不见,写了等于没写,颜料有了,还得有些辅助工具,这些辅助工具有的是辅助字体的就是改变字体样式的,就是如果想把字体改变成楷书,隶书或者宋体等这些字体;还有的就是辅助图片生成干扰线的那些固定线条产生的位置的;最后得保存,就得有内存流帮忙。
这个在控制器的写法就比较简短了,这个是生成验证码图片的代码

public ActionResult CreateValidCodeImage()
        {
            //1、生成长度为5的随机的验证码字符串 
            string strRandom= ValidCodeUtils.GetRandomCode(5);
            //2、根据生成的验证码字符串生成 验证码图片
            byte[] imgByte = ValidCodeUtils.CreateImage(strRandom);
            //3、将验证码字符串存入session中 key值为
            Session["validCode"] = strRandom;
            //4、把图片返回到视图
            return File(imgByte, @"image/jpeg");
        }

这些都是跟着老师的代码照着敲的,慢慢理解,然后明白就差不多了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值