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

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03



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

 1 /// <summary>
 2         /// 单击图片时切换图片
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void pictureBox1_Click(object sender, EventArgs e)
 7         {
 8             Random r = new Random();
 9             string str = string.Empty;
10             //生成5位随机数如 90531
11             for (int i = 0; i < 5; i++)
12             {
13                 str += r.Next(0, 10);
14             }
15             Bitmap bitmap = new Bitmap(150, 40);
16             Graphics g = Graphics.FromImage(bitmap);
17             //预定义几种字体样式和颜色
18             string[] fonts = { "微软雅黑", "宋体", "黑体", "隶书", "仿宋" };
19             Color[] colors = { Color.Yellow, Color.Blue, Color.Black, Color.Red, Color.Orange };
20             //因为每一数字的字体和颜色可能不同,
21             //因此循环将生成的随机数每一数字绘制到图片
22             for (int i = 0; i < str.Length; i++)
23             {
24                 Point p = new Point(i * 30, 0);
25                 g.DrawString(str[i].ToString(), new Font(fonts[r.Next(0, 5)], 20, FontStyle.Bold), new SolidBrush(colors[r.Next(0, 5)]), p);
26             }
27             //循环在图片范围内绘制出50条线
28             for (int i = 0; i < 50; i++)
29             {
30                 //保证线的起始点都在图片范围内
31                 Point p1 = new Point(r.Next(0, bitmap.Width), r.Next(0, bitmap.Height));
32                 Point p2 = new Point(r.Next(0, bitmap.Width), r.Next(0, bitmap.Height));
33                 g.DrawLine(new Pen(Brushes.Green), p1, p2);
34             }
35             //添加一些像素点
36             for (int i = 0; i < 300; i++)
37             {
38                 Point p1 = new Point(r.Next(0, bitmap.Width), r.Next(0, bitmap.Height));
39                 bitmap.SetPixel(p1.X, p1.Y, Color.Green);
40             }
41             //在winForm中用PictureBox中显示出来
42             pictureBox1.Image = bitmap;
43         }

最终效果如下

参考页面:http://qingqingquege.cnblogs.com/p/5933752.html

时间: 2024-12-26 21:30:53

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

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

.net学习笔记----利用System.Drawing.Image类进行图片相关操作

C#中对图片的操作主要是通过System.Drawing.Image等类进行. 一.将图片转换为字节流 /// <summary> /// 图片处理帮助类 /// </summary> public static class PicProcessHelper { /// <summary> /// 将图片转换为指定的字节流 /// </summary> /// <param name="filePath">图片路径</p

[转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上,组成适合需求的Sharepoint搜索场,搜索场的体系结构设计主要参考量是爬网内容量,微软根据爬网内容量不同将搜索场分为大型场,中型场和小型场,更多详细信息可参考: SharePoint Server 2013 中的搜索概述和在SharePoint Server 2013 中规划企业搜索体系结构.

lua学习笔记10:lua简单命令行

前面多次用了命令行,这次就好好学下命令行: 一 格式 lua [options][script][args] 二 具体命令 -e 直接将命令传个lua -l 加载一个文件 -i 进入交互模式 例如,终端输入: lua -e "print(math.sin(12))" lua学习笔记10:lua简单命令行,布布扣,bubuko.com

c++学习笔记2(c++简单程序)

c++的简单程序 练习一: #include <iostream>int main(){std::cout<<"你好c++\n";int x;std::cin>>x;std::cout<<x;return 0;} #:预处理标志,对文本进行预处理操作:预处理标志表示该行代码要最先进行处理,要在编译器编译代码之前运行.include:预处理指令 表示将<>内的文件读入. <...>头文件iostream(输入输出流)

Sharepoint2013搜索学习笔记之搜索构架简单概述(一)

Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上,组成适合需求的Sharepoint搜索场,搜索场的体系结构设计主要参考量是爬网内容量,微软根据爬网内容量不同将搜索场分为大型场,中型场和小型场,更多详细信息可参考:SharePoint Server 2013 中的搜索概述和在SharePoint Server 2013 中规划企业搜索体系结构. S

基础学习笔记之opencv(6):实现将图片生成视频

基础学习笔记之opencv(6):实现将图片生成视频 在做实验的过程中.难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的. 以下就来讲讲基于opencv的C++版本号中图片输出视频是怎么实现的. 本次试验的数据为摇摆的树枝树叶图片,Waving Trees,其来源网址为: http://research.microsoft.com/en-us/um/people/jckrumm/WallFlower/TestImages.ht 该数据全由bmp图片组成.

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map) 这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之前一直做使用Java语言开发,其丰富的组件类库使得开发效率那叫一个快呀!突然转来做JavaScript一时间还有点儿不适应(快半年了),不过自从看见那么多漂亮的网站和对JavaScript接触的越来越多,也发现了其中的一些乐趣.正如自己一直坚信的那样,编程语言仅仅是工具,重要的是编程思想!使用Jav

【web开发学习笔记】Structs2 Result学习笔记(一)简单介绍

Structs2 Result学习笔记(一)简单介绍 问题一 <struts> <constant name="struts.devMode" value="true" /> <package name="resultTypes" namespace="/r" extends="struts-default"> <action name="r1"