C# 验证码生成照码编程之后

来源:互联网 发布:十天突破雅思写作知乎 编辑:程序博客网 时间:2024/05/29 03:25

看了传智的视频,做到了验证码这一步,在视频中虽然没有验证码怎么做,但是有源码,照着源码打了一个,想着要做些总结。
验证码是涉及GDI+的操作,视频中谈及了GDI+三步:1、画布创建;2、给画布创建画笔;3、传入给要绘制的素材。
该验证可以调节字体大小、背景颜色、边框颜色,传入素材是用GUID函数生成(曾经见过有用数组然后剔除某些数据后随机选取,或许这个办法可以多避免一些1和l,0和o之类的显示尴尬吧,但是这有必要的吗?)。去网上看了几篇有关验证GDI+绘制的,突然感觉到验证码中也是大有学问啊,可以写个近2000多行的代码也是厉害了,验证码中大多数是用字符自动挑选然后生成的,感觉只是麻烦,不过对于用户可能体验会好点,直接用GUID程序员省事了(懒人啊,哈哈)。别人的验证码背景加上了背景噪点曲线和直线,背景噪点文字以及扭曲,调暗,模糊等,还包括了GDI+的图像处理方面的函数,包括雾化,扭曲,水波,锐化,高斯模糊,画直线,画曲线生成随机颜色,缩放图片,柔化图片,图片黑白化,增加曝光度,RGB滤镜,绘制圆角等功能。http://my.oschina.net/idufei/blog/95502(大神之作,感觉用来了解技术还是挺好的)SAD
对于自己学习的这个只是加上了少量的背景噪点(而且是单色噪点)和字符旋转而已。
背景噪点确定位置是在(x,y)=(random.next(0, 画布背景宽度),random.next(0, 画布背景高度) ,在文字方面进行了居中处理,多颜色随机选取(数组,这应该是常用的吧),字体的随机选择还有数字的旋转处理,然后对每一个字进行处理,对于旋转角度的,随机的选择,但是范围确实(-RandAngle,RandAngle) 之间了,对于代码中还是有不懂的代码

            //移动光标到指定位置            graphics.TranslateTransform(dot.X, dot.Y);            graphics.RotateTransform(angle);            graphics.DrawString(item.ToString(CultureInfo.InstalledUICulture), font, b, 1, 1, format);            //转回去            graphics.RotateTransform(-angle);            graphics.TranslateTransform(2, -dot.Y); //移动光标到指定位置

总结:
1、创建画布(大小看字体大小和字数),获取该画布内存使用
2、背景处理,样式处理(加效果)
3、传入字符以及字符处理(拆散)和写入图片,加入了旋转、颜色、字体、居中处理
4、存储类型、写入数据流保存

(在此致谢传智播客发布的公开课)

生成GUID 全局唯一标识符:
格式范例
1、Guid.NewGuid().ToString(“N”) 结果为:
38bddf48f43c48588e0d78761eaa1ce6
2、Guid.NewGuid().ToString(“D”) 结果为:
57d99d89-caab-482a-a0e9-a0a803eed3ba
3、Guid.NewGuid().ToString(“B”) 结果为:
{09f140d5-af72-44ba-a763-c861304b46f8}
4、Guid.NewGuid().ToString(“P”) 结果为:
(778406c2-efff-4262-ab03-70a77d09c2b5)
(来自博客园 一天到晚游泳的鱼 http://www.cnblogs.com/pato/archive/2010/01/09/1643008.html) (未申请放置权限,不知道会不会侵权啊)

0 0
原创粉丝点击