【5】GDI+ 生成验证码

这里我们做一个小应用,就是绘制一个如下图所示的验证码图片。并且点击验证码的时候会自动切换。

实现思路如下:

  1. 通过Random生成随机数或字符及验证码
  2. 通过验证码内容长度生成指定大小的图片
  3. 获取生成图片的Graphics对象
  4. 定义验证码字体格式
  5. 通过指定字体将验证码绘制到图片
  6. 向图片上添加背景噪音线
  7. 添加前景噪音点

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10
11 namespace 使用GDI绘制验证码
12 {
13     public partial class Form1 : Form
14     {
15         public Form1()
16         {
17             InitializeComponent();
18         }
19
20
21         /// <summary>
22         /// 点击更换验证码
23         /// </summary>
24         /// <param name="sender"></param>
25         /// <param name="e"></param>
26         private void pictureBox1_Click(object sender, EventArgs e)
27         {
28             Random r = new Random();
29             string str = null;
30             for (int i = 0; i < 5; i++)
31             {
32                 int rNumber = r.Next(0, 10);
33                 str += rNumber;
34             }
35             //  MessageBox.Show(str);
36             //创建GDI对象
37             Bitmap bmp = new Bitmap(150, 40);
38             Graphics g = Graphics.FromImage(bmp);
39
40             for (int i = 0; i < 5; i++)
41             {
42                 Point p = new Point(i * 20, 0);
43                 string[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" };
44                 Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Green };
45                 g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);
46             }
47
48             for (int i = 0; i < 20; i++)
49             {
50                 Point p1=new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
51                 Point p2=new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
52                 g.DrawLine(new Pen(Brushes.Green), p1, p2);
53             }
54
55             for (int i = 0; i < 500; i++)
56             {
57                 Point p=new Point(r.Next(0,bmp.Width),r.Next(0,bmp.Height));
58                 bmp.SetPixel(p.X, p.Y, Color.Black);
59             }
60
61
62             //将图片镶嵌到PictureBox中
63             pictureBox1.Image = bmp;
64         }
65     }
66 }

效果如下:

时间: 2024-10-24 06:57:54

【5】GDI+ 生成验证码的相关文章

学习笔记:利用GDI+生成简单的验证码图片

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 学习笔记:利用GDI+生成简单的验证码图片 1 /// <summary> 2 /// 单击图片时切换图片 3 /// </summary> 4 /// <param name="sender">&

一般处理程序结合gdi生成简单验证码

using (Bitmap bitmap=new Bitmap(100,40)) { using (Graphics g=Graphics.FromImage(bitmap)) { //生成验证码string s = code(); g.DrawString(s, new Font("黑体", 20), Brushes.Red, 0, 0); bitmap.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFo

asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题

最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception System.ArgumentException The requested FontFamily could not be found [GDI+ status: FontFamilyNotFound] Description: HTTP 500.Error processing request. De

详细说说如何生成验证码—ASP.NET细枝末节(4)

前言 今天小编详细的说一下,ASP.NET网站开发过程中生成验证码的全部问题. 本文的目标,是让读者了解,生成验证码涉及的全部基础知识问题. 当然这里说的是比较简单的验证码. 真正符合要求的验证码,涉及到计算机图形学的一些问题,这就不是网站开发人员该考虑的了,公司肯定有专人干这个,或者有开发包. 1.为啥要研究这东西? 在正文开始之前,我又几个问题要强调. 1.对于验证码的生成问题,即使完全不了解,也不会影响开发. 我们完全可以到网上C+V一点代码搞定(也就是说,这不是asp.net网站开发的核

生成验证码总结

java生成验证码总结 1.serialVersionUID    private static final long serialVersionUID = -8501285780349046114L;    Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.相当于java类的身份证.主要用于版本控制. 2.BufferedImage类    --BufferedImage 子类描述具有可访问图像数据缓冲区的 Image.    TYPE_INT_RG

php图形图像处理之生成验证码

\(^o^)/~ 现在网上越来越离不开验证码了,不知道小伙伴们知不知利用php的GD库就可以生成验证码,Σ(⊙▽⊙"a ...... 首先介绍几个需要用的函数. 1.imagesetpixel() 这个函数可以进行像素点的绘制,在验证码中,我们称之为“噪点”,简直是一个神器.不知道小伙伴有没有想起来验证码上的点点呢,就是用这个函数生成的. 2.str_shuffle() 利用这个打乱字符串,然后利用substr()截取给定的位数,就可以生成一个随机字符串啦. 实例: 1 <?php 2 3

PHP 动态生成验证码

……机器人会在网站中搜寻允许他们插入广告的输入表单,在虚拟世界没有什么能阻挡它们胡作非为.这些机器人效率极高,完全不关心所攻击的表单的本来用途.它们唯一的目标就是用它们的垃圾广告覆盖你的内容,残忍地为它们的主人谋取广告收入. 要检验一个表单所面对的是一个真正的人,这种测试称为CAPTCHA(完全自动化公共图灵测试).目前最有效的方法是生成一个要求用户输入的随机通行短语,为了防止支持OCR(光学字符识别)的机器人破解系统,通行短语字母必须变形,或者用随机的直线和点进行部分模糊处理. /* 生成验证

javaweb学习总结(九)—— 通过Servlet生成验证码图片

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.response.study; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5 import java.awt.Graphics2D; 6 import java.awt.image.Buff

生成验证码效果

生成验证码效果    ValidateCode.java 验证码生成类 Java代码   package cn.dsna.util.images; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.FileOutputStream; import java.io.IOException; impor