實現asp程式調用網路攝影機並控制網路攝影機進行拍照

來源:互聯網
上載者:User

這幾天好多人問我如何在asp程式中控制網路攝影機去抓拍照片,asp技術還是99年的時候看過一點點,早就著米飯吃了,不過既然有人問,那就是看得起咱,花了一個晚上的時間把asp程式調用網路攝影機拍照的問題搞定了,現記錄如下,讓有類似需求的同學可以少走些彎路。

 

用到的技術:

1.asp程式中作base64編碼和解碼,使用的是msxml組件,其實主要是用來對網路攝影機採集到的二進位圖片資料做處理,因為不可能讓使用者拍完照片以後再手動上傳,而且程式也沒辦法控制實現自動檔案上傳,所以在前台的網頁中拍照片以後要對照片資料做base64編碼處理,然後提交到伺服器端以後做base64解碼處理。

 

2.activex技術

   控制各種各樣的網路攝影機去拍照,用純網頁肯定是不可能的了,這裡的拍照片功能使用的是activex技術,做了一個activex控制項,實現了照片的裁剪,轉黑白化處理,縮放等等功能,類似於photo的圖片裁剪功能,實現的關鍵點在於用滑鼠選擇裁剪地區,以及拖動裁剪地區等。採集以後的照片資料在程式中做了標準base64編碼處理,便於網路資料轉送。

 

3.資料轉送

   其實這個不光是和網路攝影機控制項或者網路攝影機拍照有關係,所有的在http通訊協議中傳輸的base64資料都有這種情況,因為http method分為get方式和post方式,而get方式在個別瀏覽器上的實現有所限制,如最大的資料量不能大於多少K,所以要在http通訊協議下傳輸大資料量的東西,要選擇post方式去處理。

 

4.activex技術與服務區端asp程式的互動

   用戶端瀏覽器中操作網路攝影機進行抓拍處理是activex控制項完成的,但是activex控制項的資料並不能直接 submit到伺服器端處理,也就是說asp代碼中你想直接取網路攝影機的照片資料是取不到的,那就需要把用戶端瀏覽器中的activex控制項拍照的資料拿出來,讓伺服器端的asp程式碼可以訪問到照片資料,這樣就需要有個“代理”或者叫做“中轉站”的東西去做這個事情,其實說白了很簡單,就是我們的activex資料不能直接提交,你要放在文字框裡面或者hidden隱藏元素裡面去提交給asp程式.

 

5. 照片資料儲存

   伺服器端收到的照片資料是base64字串,這些字串怎麼才可以轉變成二進位的圖片資料呢。這裡面還涉及到一個將base64資料解碼以後寫二進位檔案的問題,既然涉及到寫檔案,就需要對web項目的安全許可權做一些設定,偷懶的辦法是給everyone完全控制許可權就可以了。

 

以上的是技術思路和實現方案,來點乾的吧,直接上代碼:

 

 

<%@ LANGUAGE=VBScript CodePage=65001%>
<%
private function decodeBase64(base64) 
   dim DM, EL 
   Set DM = CreateObject("Microsoft.XMLDOM") 
   Set EL = DM.createElement("tmp") 
   EL.DataType = "bin.base64"
   EL.Text = base64 
   decodeBase64 = EL.NodeTypedValue 
end function


dim data

data=decodeBase64(request.Form("pic_data"))


set stm=Server.CreateObject("ADODB.Stream")
'stm.Mode=adSaveCreateOverWrite 'adModeReadWrite
stm.type=1
stm.open
stm.Write(data)
stm.SaveToFile Server.MapPath("./") & "/" & request.Form("desc") & ".jpg",2
stm.Close
set stm=nothing

 

response.write "<img src='" & request.Form("desc") & ".jpg" & "'/>"

response.write "desc:" & request.Form("desc")
response.end

%>

 

 

華麗的分割線以下為前台操作網路攝影機拍照的html頁面原始碼

---------------------------------------------------------------------------------------------------

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>video cap control demo</title>
<script type="text/javascript" src="./js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="test1.js"></script>
</head>
<body>
 
<form action="test1.asp" id="cap_form" method="post">
<input type="hidden"  id="picData" name="picData">
<object classid="clsid:34681DB3-58E6-4512-86F2-9477F1A9F3D8"
 id="WebVideoCap1" codebase="./cabs/Package.cab#version=1,0,0,50" width="636" height="238">
 <param name="Visible" value="0">
 <param name="AutoScroll" value="0">
 <param name="AutoSize" value="0">
 <param name="AxBorderStyle" value="1">
 <param name="Caption" value="WebVideoCap">
 <param name="Color" value="4278190095">
 <param name="Font" value="宋體">
 <param name="KeyPreview" value="0">
 <param name="PixelsPerInch" value="96">
 <param name="PrintScale" value="1">
 <param name="Scaled" value="-1">
 <param name="DropTarget" value="0">
 <param name="HelpFile" value>
 <param name="PopupMode" value="0">
 <param name="ScreenSnap" value="0">
 <param name="SnapBuffer" value="10">
 <param name="DockSite" value="0">
 <param name="DoubleBuffered" value="0">
 <param name="ParentDoubleBuffered" value="0">
 <param name="UseDockManager" value="0">
 <param name="Enabled" value="-1">
 <param name="AlignWithMargins" value="0">
 <param name="ParentCustomHint" value="-1">
 <param name="jpegBase64Data" value>
 <param name="bmpBase64Data" value>
</object>
<hr/>

<input type="hidden" name="pic_data" id="pic_data"/>
照片描述:<input type="text" name="desc" id="desc"/>

<input type="button" value="照相" id="btn_cap"/>

<input type="button" value="提交" id="btn_submit"/>

</form>
</body>
</html>

 代碼下載地址點這裡 

---------------------------------------------------------------------------------

 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.