zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    linux(ubuntu)设置开机启动
    mysql 数据库迁移
    maven GroupId和ArtifactID
    Android内存溢出与内存泄漏
    Android性能优化方向和相关工具
    安卓 px,dpi,dp,ps的区别与联系
    python 深浅拷贝
    公网ip和私网ip
    打开系统设置页
    如何用代码开启“个人热点”功能?如何用代码把iOS设备设置成一个无线路由?
  • 原文地址:https://www.cnblogs.com/aimyfly/p/2298134.html
Copyright © 2011-2022 走看看