行代码三个文件
Asp文件CodeAsp
数据文件bodyFix HeadFix
用法<img src="codeasp">
<%Option ExplicitResponsebuffer=trueNumCodeFunction NumCode() ResponseExpires = ResponseAddHeader "Pragma""nocache" ResponseAddHeader "cachectrol""nocache" dim zNumij dim AdosAdos Randomize timer zNum = cint(*Rnd+) Session("GetCode") = zNum dim zimg()NStr NStr=cstr(zNum) For i= to zimg(i)=cint(mid(NStri+)) Next dim Pos set Ados=ServerCreateObject("AdodbStream") AdosMode= AdosType= AdosOpen set Ados=ServerCreateObject("AdodbStream") AdosMode= AdosType= AdosOpen AdosLoadFromFile(Servermappath("bodyFix")) Adoswrite Adosread() for i= to AdosPosition=(zimg(i))* AdosPosition=i* Adoswrite adosread() next AdosLoadFromFile(Servermappath("headfix")) Pos=lenb(Adosread()) AdosPosition=Pos for i= to step for j= to AdosPosition=i*+j* AdosPosition=Pos+*j+i* Adoswrite adosread() next next ResponseContentType = "image/BMP" AdosPosition= ResponseBinaryWrite Adosread() AdosClose:set Ados=nothing AdosClose:set Ados=nothingEnd Function Asp code Created by BlueIdeaCOM Web Team V %>
代码解释:
Responsebuffer=true
NumCode
Function NumCode()
ResponseExpires =
ResponseAddHeader "Pragma""nocache"
ResponseAddHeader "cachectrol""nocache"
dim zNumij
dim AdosAdos
Randomize timer
生成随机四位数字
zNum = cint(*Rnd+)
传递给session
Session("GetCode") = zNum
该for循环是将随机数字放入一个下标的数组便于提供给后面的阵列变换
dim zimg()NStr
NStr=cstr(zNum)
For i= to
zimg(i)=cint(mid(NStri+))
Next
dim Pos
定义二个 ADODBStream binary对象作图像数据操作之用:
set Ados=ServerCreateObject("AdodbStream")
AdosMode=
AdosType=
AdosOpen
set Ados=ServerCreateObject("AdodbStream")
AdosMode=
AdosType=
AdosOpen
载入~的数字数据x的Gbr的阵列数据每个字节个数字byte
BGR一个点x个点一个数字一个点三个字节(二进制位进制 ~FF)
一行个点 字节 + 行结束标记 二字节 字节所以一个x宽小于长的图像每个数字x是字节
长大于宽的则无行结束标记 直接是字节
这些就是BMP bit的数据详细信息了
‘至于头部也很简单包含长宽图像开始标记等等~~才字节远没jpg什么的复杂
AdosLoadFromFile(Servermappath("bodyFix"))
Adoswrite Adosread()
第一个for循环按生成的随机数字顺序从 X的数字阵列中提取出相应的四个数字
但是竖排的数字阵列
for i= to
AdosPosition=(zimg(i))*
AdosPosition=i*
Adoswrite adosread()
next
清空已经用完的ADOS的数据调入替换新的图像头字节的头文件
AdosLoadFromFile(Servermappath("headfix"))
Pos=lenb(Adosread())
AdosPosition=Pos
指定Pos位置即可再偏移字节的位置添加图形数据
第二个for循环进行数字的阵列变换由竖排的块转换为横排的数字块
方法是隔字节抽取次字节写入ados对象再抽取偏移第二行的图像数据
字节是因为bmp 宽大于长时无 的行结束标记
以下为引用的内容
for i= to step
for j= to
AdosPosition=i*+j*
AdosPosition=Pos+*j+i*
Adoswrite adosread()
next
next
AdosPosition=
responseBinaryWrite直接向客户端发送图像数据
ResponseContentType = "image/BMP"
ResponseBinaryWrite Adosread()
AdosClose:set Ados=nothing
AdosClose:set Ados=nothing
End Function