1. 程式人生 > >JS呼叫本地攝像頭拍照(相容各大瀏覽器及IE8+)

JS呼叫本地攝像頭拍照(相容各大瀏覽器及IE8+)

最近做的專案遇到了個難題,使用video+canvas+getUserMedia()寫的呼叫本地攝像頭拍照不相容IE。
原因:IE8及以下不支援HTML5標籤:video和canvas;IE11及以下所有版本,包括Edge都不支援getUserMedia()。
所以,這幾天在網上各種搜,發現想要相容IE瀏覽器就只能使用Flash。

解決方案

方案一

flash+as3.0+swfobject實現攝像頭拍照
方案分析:
1、使用 adobe flash + actionscript 製作swf檔案;
2、採用swfobject.js外掛實現頁面呼叫swf檔案。
有一篇部落格寫得特別好:

flash+as3.0+swfobject實現攝像頭拍照

這樣可以自定義swf檔案,但是代價好高啊,還要去學actionscript並且要裝adobe flash CS6,花的時間太多了。

所以我想到既然有封裝的swfobject外掛可以更方便的插入flash,那是不是有相容性好的封裝好的控制元件可以直接呼叫攝像頭。這個搜尋過程真的是艱辛無比啊!終於讓我找到了jQuery攝像頭外掛“jquery-webcam-plugin”。

方案二

jquery-webcam-plugin+canvas+後臺處理
方案分析:

  1. 使用 jquery-webcam-plugin 顯示本地攝像頭。
  2. 點選拍照按鈕後,
    (a) 針對 IE9 及以上:通過flash呼叫攝像頭後,將影象直接輸出到canvas畫布中,再通過canvas中的方法 toDataURL()方法,生成影象的base64編碼傳到後臺。
    (b)針對 IE8 及以下:因為 IE8 無法用canvas.toDataURL() ,因此拍照後無法直接將圖片進行顯示。這時通過flash呼叫攝像頭,將得到的畫素點陣傳到後臺,讓後臺處理,生成影象的 base64 編碼,再在前端進行顯示。
/* CSS */
.borderstyle {
    border: 1px solid #b6b6b6;
    width: 320px;
    height: 240px;
}
#camera {
    float: left;
    margin:10px;
}
#canvas {
    width: 320px;
    height: 240px;
    margin:10px;
}
/* camera.js程式碼 */
$(function () {
    var w = 320, h = 240;
    var pos = 0,
        ctx = null,
        saveCB;

    var
canvas = document.getElementById("canvas") if (canvas.toDataURL) { ctx = canvas.getContext("2d"); var image = ctx.getImageData(0, 0, w, h); saveCB = function (data) { var col = data.split(";"); var img = image; for (var i = 0; i < 320; i++) { var tmp = parseInt(col[i]); img.data[pos + 0] = (tmp >> 16) & 0xff; img.data[pos + 1] = (tmp >> 8) & 0xff; img.data[pos + 2] = tmp & 0xff; img.data[pos + 3] = 0xff; pos += 4; } if (pos >= 4 * 320 * 240) { ctx.putImageData(img, 0, 0); var Imagedata = canvas.toDataURL().substring(22); //上傳給後臺的圖片資料 pos = 0; } }; } else { var image = []; saveCB = function (data) { image.push(data); pos += 4 * 320; if (pos >= 4 * 320 * 240) { $.post(URL, {briStr: image.join(';')}, function (data) { console.log(data); //在頁面顯示base64圖片處理 pos = 0; image = []; }); } }; } $("#camera").webcam({ width: w, height: h, mode: "callback", swffile: "plugins/jQuery-webcam-master/jscam.swf", onSave: saveCB, onCapture: function () { //捕獲影象 webcam.save(); }, debug: function (type, string) { //控制檯資訊 //console.log(type + ": " + string); }, onLoad: function () { //flash 載入完畢執行 //console.log('載入完畢!') } }); $(".play").click(function () { webcam.capture(); }); });
<!-- index.html -->
<body>
<div>
    <div id="camera" class="borderstyle"></div>
    <canvas id="canvas" class="borderstyle" width="320px" height="240px"></canvas>
    <div id="showImg"></div>
    <button class="play">拍照</button>
</div>
<script src="camera.js"></script>
</body>

相關推薦

JS呼叫本地攝像頭拍照相容瀏覽器IE8+

最近做的專案遇到了個難題,使用video+canvas+getUserMedia()寫的呼叫本地攝像頭拍照不相容IE。 原因:IE8及以下不支援HTML5標籤:video和canvas;IE11及以下所有版本,包括Edge都不支援getUserMedia()。

調用本地攝像頭拍照H5和畫布

orf video listen text1 tint != roi source 捕捉 關於H5 和 畫布 調用本地攝像頭拍照功能的實現 1.代碼的實現(html部分) <input type="button" title="開啟攝像頭" value="開啟攝像頭"

js呼叫攝像頭拍照,js呼叫攝像頭線上拍照,js呼叫電腦攝像頭拍照

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>人臉採集</title> <script src="jque

使用JS讀取本地文字檔案相容各種瀏覽器

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="te

利用html5呼叫本地攝像頭拍照上傳圖片

<script>        //判斷瀏覽器是否支援HTML5 Canvas            window.onload = function () {                try {                    //動態建立一個canvas元 ,並獲取他2Dcont

js回車事件相容瀏覽器

<script type="text/javascript" language=JavaScript charset="UTF-8"> document.onkeydown=function(event){ var e = even

相容瀏覽器js 陣列刪除元素方法方法

例項 例子 1 在本例中,我們將建立一個新陣列,並向其新增一個元素: <script type="text/javascript"> var arr = new Array(6) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" arr[3

js的window.onscroll事件兼容瀏覽器

public spa pan 標題 cnblogs window set 滾動條事件 Language 為窗口添加滾動條事件其實非常的簡單, window.onscroll=function(){}; 註意在獲取滾動條距離的時候 谷歌不識別document.documen

css3相容瀏覽器的漸變色

.class{  background:-moz-linear-gradient(top,#04BEFE,#4481EB);/*Mozilla*/ background:-webkit-gradient(linear,0 50%,100% 50%,from(#04BEFE),to(

呼叫本地攝像頭進行拍照

jsp介面程式碼 <div class="col-lg-4 col-md-4 col-sm-4 form-group " > <input type="button" value="拍照" id="saveBtn" onclick="savePh

H5實現呼叫本地攝像頭實現實時視訊以及拍照功能

getUserMedia API HTML 5 的getUserMedia API提供了訪問媒體的能力, 基於該特性, 開發者可以不依賴任何瀏覽器外掛下去訪問視訊和音訊等裝置. 舊版API : navigator.getUserMedia  新版API : navi

在chrome中,呼叫本地攝像頭

原文地址:https://blog.csdn.net/journey191/article/details/40744015 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head

PC網頁js呼叫本地應用程式

最近要現實一個在PC網頁中實現點選按鈕呼叫本地應用程式的功能 其實實現原理也非常簡單, 首先註冊一個本地登錄檔檔案,指向本地應用程式路徑 其次在網頁中用js指向這個登錄檔檔案,就可以實現網頁呼叫本地應用程式  Windows Registry Editor Version 5.00

Html5呼叫本地攝像頭

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> #c

js貪吃蛇小遊戲相容ie8DOM,BOM操作

效果圖 本篇將使用JavaScript 編寫一個貪吃蛇的小遊戲,採用OOP(面向物件)程式設計 基本沒有CSS樣式和HTML結構,主要是體會js操作 HTML程式碼 <div class="map"></div> &

Android呼叫相簿、相機相容6.0、7.0、8.0所需新增的許可權

在AndroidManifest.xml中新增: <!--讀寫記憶體塊許可權--> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/&

HTML5呼叫手機攝像頭拍照

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ http://blog.sina.com.cn/s/blog_4ad7c2540101lnak.html HTML5 The Media

java呼叫本地攝像頭,實現人臉識別

package com.lw.test; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.imag

js滾動條外掛相容各個主流瀏覽器

《js 滾動條外掛》 <html> <head><meta charset="UTF-8"><title>scrollBar</title><style type="text/css">body,div

給某個元素的innerHTML賦值,並使得值中的js程式碼有效相容多個瀏覽器

症狀:給某個元素的 innerHTML 設定值時,如果提供的 HTML 程式碼中包含js指令碼,很多時候這些指令碼無效,或者在某種瀏覽器上有效,但在其它瀏覽器上無效。 原因:不同瀏覽器對插入 innerHTML 中的指令碼有不同的處理方法。經過實踐,歸納如下: 對於IE,首