fix是bmp的一种衍生格式,可用于asp生成验证码图形

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 byte

fix是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
%>

http://xiayankun.blog.163.com/blog/#m=0

原文地址:https://www.cnblogs.com/aimyfly/p/2298134.html