ASP验证码的制作方法教程汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASP验证码的制作方法教程
一、BMP图知识学习
经过一个星期的学习和研究,终于做出了自己的验证码,在这感谢网友的知识分享受,今天我把我的经验和心得分享给网友们,有什么不懂的,可以QQ184201917问我。
首先你的弄懂BMP图的存储原理,下面我们来看下图:
首先,需要知道BMP 文件里面的字节数据有四个部分,分别是:位图文件头(
bitmap-file header )、位图信息头(bitmap-information header )、彩色表(color
table )、定义位图的字节(即位图数据Data Body )阵列
但是对于我们现在要讨论的24 位真彩的BMP 文件来说,里面不存在彩色表,因此整个
里面只剩下三个部分。
如上图所示,是一个24 位真彩图的字节数据(使用的UltraEdit 打开)的开始部分截
图(里面的数据均为16 进制,即每两个数字代表一个字节),表上面的顶栏0~f 和左侧的000000XX0h 是用来方面看数据的(也可以方便记数),比如数据表的第一行的第三个字节数
据9E 的位置就是00000000h + 2 = 00000002h ,这就是为什么在一些解释中定位中使用000000XXXh 的原因。
我们可以看到数据表被三种颜色的线条划分为16 个部分:
1~4 部分(红色线划分)是位图文件头;
5~15 部分(开始用蓝色线条划分部分)是位图信息头;
16 部分(既就是用绿色线划分的后面所有数据)是位图的字节阵列;
如上所说,因为是24 位真彩图,所以不存在彩色表。下来详细说明每一部分代表什么含义:(首先在这里强调一下!!!!在上图中的字节数据中,拿第二部分表示文件大小的字节数据(9E 40 09 00 )来说,其16 进制真正的顺序和上面显示的是相反的,即就是上图表示的文件大小为0009499E (用16 进制表示),因此在读取文件数据操作时,就就需要注意了!!!!)1~4 部分(位图文件头):
1: 42 4D 这是BMP 文件的标示,是ASCII 的BM 的16 进制的值;(大小:2
byte )
2 :9E 40 09 00 用字节表示的整个文件的大小;(大小:4 byte = 1 dword )
3 :00 00 00 00 保留,设置为0 ;(大小:
4 byte = 1 dword )
4 :36 00 00 00 从文件开始到位图数据开始之间的数据(bitmap data) 之间的偏移
量;(大小:4 byte = 1 dword )
5~15 部分(位图信息头):
5 :28 00 00 00 位图信息头(Bitmap Info Header) 的长度;(大小:4 byte = 1
dword )
6 :F
7 01 00 00 位图的宽度,以像素为单位;(大小:4 byte = 1 dword )(它的
16 进制大小应反过来,所以10 进制大小是503 )
7 :91 01 00 00 位图的高度,以像素为单位;(大小:4 byte = 1 dword )
8 :01 00 位图的位面数;(大小:2 byte = 1 word )
9 :18 00 每个像素的位数;(大小:2 byte = 1 word )
10 :00 00 00 00 压缩说明(0 表示不压缩)(大小:4 byte = 1 dword )
11 :68 40 09 00 用字节数表示的位图数据的大小。该数必须是4 的倍数(至于为什
么下面会有解释)(大小:4 byte = 1 dword )
12 :C4 0E 00 00 用像素/ 米表示的水平分辨率;(大小:4 byte = 1 dword )
13 :C4 0E 00 00 用像素/ 米表示的垂直分辨率;(大小:4 byte = 1 dword )
14: 00 00 00 00 位图使用的颜色数;(大小:4 byte = 1 dword )
15-4-9 三分钟解析24位真彩BMP格式文件- 推酷
/articles/FvaIVj 3/7
15 :00 00 00 00 指定重要的颜色数。当该域的值等于颜色数时,表示所有颜色都一样
重要;(大小:4 byte = 1 dword )
16 部分(位图字节阵列):
16 :从上面的绿色划分线以后均为字节阵列数据,用于绘制。而且每三个字节表示一个像素。
描述完了上述的图的分块含义,现在就说一说BMP 中的一些需要注意的方面,首先在位图字节阵列数据中BMP 存储的图像数据是从左下角的像素开始,到最后的右上角像素。其中还有一个比较主要的概念,而且与绘图读取数据有关的概念是“扫描行”;
扫描行:扫描行指图像在存储器中一行像素的字节数据,图像扫描行的大小,取决于图象的颜色数目和用象素表示的图象宽度。BMP 格式还有个非常重要的规定:要求每一扫描行的字节数据必须能被4 整除,也就是dword 对齐(dword 是一种数据类型,长度为4 个字节)。如果图像的一行字节数不能被 4 整除,就需要在每行的末尾补齐0 以达到规定。因此在我们的读取数据中需要根据BMP 图像的宽度来判断是否被补0 ,判断方法就是先判断一行的字节数是否可以被4 整除,如果整除则不需要补0 ,如果没有整除,则求出补的0 的个数(具体计算方法是,bu_0_number = width( 像素) * 3 % 4 ),那么就知道在每一行的末尾都补了bu_0_number 个0 ,因此我们在读取时绘制图片时就要忽略这些数据。(补充:求每一行的字节数size = width * 3 )
经过上面分析,我们已经可以着手写程序了,因为整个过程已经在我们脑袋中了。首先从上面可以看出,位图文件头部分的数据只有宽度和高度部分的数据对我们有作用(对于我们已经知道需要解析的图片是24 位真彩BMP 图片),下来有用的就是位图字节阵列部分的数据,里面每三个代表一个像素的RGB 值(里面补0 的部分忽略),字节存储的图片像素的顺序是从左下到右上,这样我们只需要读一组RGB 值设置画笔颜色,然后绘制一个像素;读一组RGB 值设置颜色再绘制一个像素就可以了
二、学习弄清网上大量的10X100的BMP的ASP验证程序
1、把下面的程序复制粘贴到checkcode.asp中
<%