行代碼三個文件
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
From:http://tw.wingwit.com/Article/program/net/201311/14069.html