ASP验证码的制作方法教程汇总

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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中

<%

相关文档
最新文档