欢迎来到天天文库
浏览记录
ID:38185536
大小:35.50 KB
页数:3页
时间:2019-05-24
《改进的图片验证码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、改进的图片验证码上次开发出图片验证码之后(上篇文章),根据一些朋友的建议,本着验证码易识别(针对人),不易破解,美观的原则,改进了验证码生成的算法,采用图像滤镜的方法,对图片验证码进行反破解干扰,结果图片示例如下:滤镜效果主要采用波形(wave)算法,通过对X轴Y轴的正弦波形处理,产生叠加效果。算法主要描述如下: privateconstdoublePI=3.1415926535897932384626433832795; privateconstdoublePI2=6.283185307179586476925286766559; /// ///正弦曲
2、线Wave扭曲图片 /// /// /// ///波形的幅度倍数 ///波形的起始相位,取值区间[0-2*PI) /// publicSystem.Drawing.BitmapTwistImage(BitmapsrcBmp,boolbXDir,doubledMultValue,dou
3、bledPhase) { System.Drawing.BitmapdestBmp=newBitmap(srcBmp.Width,srcBmp.Height); //将位图背景填充为白色 System.Drawing.Graphicsgraph=System.Drawing.Graphics.FromImage(destBmp); graph.FillRectangle(newSolidBrush(System.Drawing.Color.White),0,0,destBmp.Width,destBmp.Height); graph.Dispose();
4、 doubledBaseAxisLen=bXDir?(double)destBmp.Height:(double)destBmp.Width; for(inti=0;i5、前点的颜色 intnOldX=0,nOldY=0; nOldX=bXDir?i+(int)(dy*dMultValue):i; nOldY=bXDir?j:j+(int)(dy*dMultValue); System.Drawing.Colorcolor=srcBmp.GetPixel(i,j); if(nOldX>=0&&nOldX=0&&nOldY6、 } } } returndestBmp; }开头的示例图片,是两次波形效果的叠加,两次效果分别针对X轴方向和Y轴方向,如果取消对边缘背景色的填充,可以看到算法对图形的影响,如下图:这样产生的验证码,看起来很像Google站点上的验证码吧,当然,如果你有兴趣,还可以添加其他的滤镜效果,如拉伸,旋转,马赛克等。但是注意一点,网站验证码不是越复杂越好,要在速度和安全上找到一个平衡点。
5、前点的颜色 intnOldX=0,nOldY=0; nOldX=bXDir?i+(int)(dy*dMultValue):i; nOldY=bXDir?j:j+(int)(dy*dMultValue); System.Drawing.Colorcolor=srcBmp.GetPixel(i,j); if(nOldX>=0&&nOldX=0&&nOldY6、 } } } returndestBmp; }开头的示例图片,是两次波形效果的叠加,两次效果分别针对X轴方向和Y轴方向,如果取消对边缘背景色的填充,可以看到算法对图形的影响,如下图:这样产生的验证码,看起来很像Google站点上的验证码吧,当然,如果你有兴趣,还可以添加其他的滤镜效果,如拉伸,旋转,马赛克等。但是注意一点,网站验证码不是越复杂越好,要在速度和安全上找到一个平衡点。
6、 } } } returndestBmp; }开头的示例图片,是两次波形效果的叠加,两次效果分别针对X轴方向和Y轴方向,如果取消对边缘背景色的填充,可以看到算法对图形的影响,如下图:这样产生的验证码,看起来很像Google站点上的验证码吧,当然,如果你有兴趣,还可以添加其他的滤镜效果,如拉伸,旋转,马赛克等。但是注意一点,网站验证码不是越复杂越好,要在速度和安全上找到一个平衡点。
此文档下载收益归作者所有