熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

ASP生成圖片彩色校驗碼

2013-11-13 10:35:27  來源: .NET編程 

  行代碼三個文件

  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

  載入~的數字數據xGbr的陣列數據每個字節個數字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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.