刀俎!天堂和地狱的差别!

Dance in hell, death in heaven, live in world, love in dream

用户操作
[即时聊天] [发私信] [加为好友]
伴佬ID:abandonship
105948次访问,排名886,好友183人,关注者244人。
web开发
abandonship的文章
原创 79 篇
翻译 0 篇
转载 23 篇
评论 36 篇
abandonship的公告
生活催人老,

努力多赚钱!

天气预报


悼念逝去的生命
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
jjcxfly:不错,这样就比较详细,其他的都太笼统了,说了一大篇,一句正题都不挨~
abandonship:不好意思,昨天光写了个题目,内容往贴了
esports52:你是提问? 被忽悠了
sky_tiankong:无意中让我发现了这个学习的好地方,挺好
加你为好友吧 我也是刚刚学,多多照顾了
文章分类
收藏
    相册
    I can fly!
    .net
    Jesse Ezell's Blog
    Rickie Lee's blog
    孟子
    思归呓语
    蝈蝈俊
    J2EE
    J2ME
    javascript
    梅花雪
    SQL
    zjcxc(邹建)
    其他
    css2在线手册
    综合
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 使用ASP生成图片彩色校验码收藏

    新一篇: 考虑到了闰年及二月的问题,很详细的正则表达式 | 旧一篇: 献出一份爱心 共同援助重病程序员王俊

    使用ASP生成图片彩色校验码


    49行代码,三个文件
    Asp文件:Code.Asp
    数据文件:body.Fix , Head.Fix
    --下载:下载打包文件
    用法:<img src="code.asp">

    <%Option ExplicitResponse.buffer=trueNumCodeFunction NumCode()    Response.Expires = -1    Response.AddHeader "Pragma","no-cache"    Response.AddHeader "cache-ctrol","no-cache"    dim zNum,i,j    dim Ados,Ados1    Randomize timer    zNum = cint(8999*Rnd+1000)    Session("GetCode") = zNum    dim zimg(4),NStr        NStr=cstr(zNum)        For i=0 to 3            zimg(i)=cint(mid(NStr,i+1,1))        Next    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.Fix"))        Ados1.write Ados.read(1280)        for i=0 to 3            Ados.Position=(9-zimg(i))*320            Ados1.Position=i*320            Ados1.write ados.read(320)        next            Ados.LoadFromFile(Server.mappath("head.fix"))        Pos=lenb(Ados.read())        Ados.Position=Pos        for i=0 to 9 step 1            for j=0 to 3                Ados1.Position=i*32+j*320                Ados.Position=Pos+30*j+i*120                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=nothingEnd Function' Asp code Created by BlueIdea.COM Web Team V37 2003-7-25%>


    代码解释:

    Response.buffer=true
    NumCode
    Function NumCode()
     Response.Expires = -1
     Response.AddHeader "Pragma","no-cache"
     Response.AddHeader "cache-ctrol","no-cache"
     dim zNum,i,j
     dim Ados,Ados1
     Randomize timer
    生成随机四位数字:
     zNum = cint(8999*Rnd+1000)
    传递给session
     Session("GetCode") = zNum
    该for循环是将随机数字放入一个下标3的数组,便于提供给后面的阵列变换
     dim zimg(3),NStr
     NStr=cstr(zNum)
     For i=0 to 3
     zimg(i)=cint(mid(NStr,i+1,1))
     Next
     dim Pos

    '定义二个 ADODB.Stream binary对象,作图像数据操作之用:

     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
    '载入0~9的数字数据10x100的,Gbr的阵列数据,每个320字节,10个数字3200byte
    'BGR一个点,10x10个点一个数字,一个点三个字节(二进制8位,16进制 00~FF)
    '一行10个点 30字节 + 行结束标记 00 00 二字节 32字节,所以一个10x100宽小于长的图像每个数字10x10是320字节
    '长大于宽的则无行结束标记 0000,直接是300字节
    这些就是BMP 24bit的数据详细信息了
    ‘至于头部,也很简单,包含长宽,图像开始标记等等~~才54字节,远没jpg什么的复杂

     Ados.LoadFromFile(Server.mappath("body.Fix"))
     Ados1.write Ados.read(1280)
    '第一个for循环,按生成的随机数字顺序从 10X100的数字阵列中提取出相应的四个数字
    但是竖排的数字阵列
     for i=0 to 3
     Ados.Position=(9-zimg(i))*320
     Ados1.Position=i*320
     Ados1.write ados.read(320)
     next
    '清空已经用完的ADOS的数据,调入替换新的图像头54字节的头文件
     Ados.LoadFromFile(Server.mappath("head.fix"))
     Pos=lenb(Ados.read())
     Ados.Position=Pos '指定Pos位置,即可再偏移54字节的位置添加图形数据
    第二个for循环,进行数字的阵列变换,由竖排的块转换为横排的数字块
    方法是隔320字节抽取4次30字节写入ados对象,再抽取偏移第二行的图像数据
    30字节是因为bmp 宽大于长时无00 00的行结束标记
     for i=0 to 9 step 1
     for j=0 to 3
     Ados1.Position=i*32+j*320
     Ados.Position=Pos+30*j+i*120
     Ados.write ados1.read(30)
     next
     next
     Ados.Position=0
    response.BinaryWrite直接向客户端发送图像数据
     Response.ContentType = "image/BMP"
     Response.BinaryWrite Ados.read()
     Ados.Close:set Ados=nothing
     Ados1.Close:set Ados1=nothing
    End Function

    发表于 @ 2005年07月12日 09:11:00|评论(loading...)|编辑

    新一篇: 考虑到了闰年及二月的问题,很详细的正则表达式 | 旧一篇: 献出一份爱心 共同援助重病程序员王俊

    评论

    # 发表于2005-07-19 09:28:00  IP:
    TrackBack来自《guofeng》

    guofeng
    # 发表于2005-07-19 09:29:00  IP:
    TrackBack来自《abandonship》

    ???
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © abandonship