fix是bmp的一种衍生格式,可用于asp生成验证码图形
2007-10-10 14:50:36| 分类: | 标签: |字号大中小
ASP源码中的body.fix与head.fix文件了。那是与验证码有关的,要完全搞清楚这个就得搞清楚bmp格式的图片文件的编码了。
bmp文件的前54Byte的内容是头部信息,利用程序或工具把这54Bye的内容读出来存为head.fix文件。除这54Byte的数据后就是RGB阵列数据了,这部分内容存为body.fix文件。 CHECKCODE.ASP程序会根据需求,从body.fix中读取一小块陈列数据组合,再与head.fix中的数据合在一起成为一个图片,再发送到浏览器,用来显示图片验证码。 所以这里的.fix文件只是用来保存一堆有用的数据的文件,用CHECKCODE.ASP来读取它里面的数据。 怎么建的文件??用程序,读取文件的二进制数据,指定从什么地方读,读多少,再保存读取到的数据。
ASP中的 Adodb.Stream 对象就可以出色的完成这个任务。也就是说*.fix文件 是用程序编写再生成的 。
不是用什么画图工具生成的。先用图像编辑软件编辑出漂亮的图片,保存,再用再编程读取这个图片并分解成两个文件保存下来。
一个例子:
1 图象绘制完成后,将文件存为24位位图格式的BMP图象文件。 2 去除前54Byte内容. 3 改名为BODY+数字.FIX 4 修改CHECKCODE.ASP,调用你新做的这个文件. (checkcode.asp 负责生成和输出验证码 1309 byte,head.fix 是54byte的BMP头,body.fix 数字0~9 10X100竖排的RGB阵列数据3200 byte ) 就是生成彩色验证码的文件 1、checkcode.ASP 负责生成和输出验证码 1309 byte。 2、head.fix 是54byte的BMP头 3 、body.fix 数字0~9 10X100竖排的RGB阵列数据3200 bytefix是bmp的一种衍生格式,可用于asp生成验证码图形。
一个例子: 1 图象绘制完成后,将文件存为24位位图格式的BMP图象文件。 2 去除前54Byte内容. 3 改名为BODY+数字.FIX 4 修改CHECKCODE.ASP,调用你新做的这个文件. (checkcode.asp 负责生成和输出验证码 1309 byte,head.fix 是54byte的BMP头,body.fix 数字0~9 10X100竖排的RGB阵列数据3200 byte ) 就是生成彩色验证码的文件 1、checkcode.ASP 负责生成和输出验证码 1309 byte。 2、head.fix 是54byte的BMP头 3 、body.fix 数字0~9 10X100竖排的RGB阵列数据3200 byte程序代码 <%Option Explicit Response.buffer = True NumCode (14) Function NumCode(CodeType) Response.Expires = -1 Response.AddHeader "Pragma", "no-cache" Response.AddHeader "cache-ctrol", "no-cache" On Error Resume Next Dim zNum, rNum, i, j, listnum, listcode Dim Ados, Ados1 listcode = "0123456789abcdefghijklmnopqrstuvwxyz" Randomize Timer Dim zimg(6), NStr For i = 0 To 5 rNum = CStr(CInt(9 * Rnd)) zimg(i) = rNum listnum = listnum & Mid(listcode, rNum + 1, 1) Next Session("CheckCode") = listnum Dim Pos Set Ados = Server.CreateObject("Adodb.Stream") Ados.Mode = 3 Ados.Type = 1 Ados.Open Set Ados1 = Server.CreateObject("Adodb.Stream") Ados1.Mode = 3 Ados1.Type = 1 Ados1.Open Ados.LoadFromFile (Server.mappath("body" & CodeType & ".Fix")) Ados1.write Ados.read(2880) 这后面的2880 For i = 0 To 5 Ados.Position = (35 - zimg(i)) * 480 这里的480,35-zimg(i)起什么作用,他们有什么关系 Ados1.Position = i * 480 Ados1.write Ados.read(480) Next Ados.LoadFromFile (Server.mappath("head.fix")) Pos = LenB(Ados.read()) Ados.Position = Pos For i = 0 To 15 Step 1 为什么循环只到15,而下面到5,又出现32,480,270,30这些数字搞的东西我都搞不懂!请哪位高手能给讲一下吗? For j = 0 To 5 Ados1.Position = i * 32 + j * 480 Ados.Position = Pos + 30 * j + i * 270 Ados.write Ados1.read(30) Next Next Response.ContentType = "image/BMP" Ados.Position = 0 Response.BinaryWrite Ados.read() Ados.Close: Set Ados = Nothing Ados1.Close: Set Ados1 = Nothing 'If Err Then Session("CheckCode") = "999999" End Function %>