html调用摄像头源码_html访问摄像头

hacker|
105

文章目录:

html5移动端调用手机摄像头扫描二维码并获取二维码信息代码怎么写?

html5移动端调用手机摄像头扫描二维码并获取二维码信息代码如下:

[html] view plain copy

!DOCTYPE html

htmlhead

titleHTML5 code Reader/title

meta http-equiv="Content-Type" content="text/html; charset=gb2312"

/head

style type="text/css"

html, body { height: 100%; width: 100%; text-align:center; }

/style

script src="jquery-1.9.1.js"/script

script

//这段代 主要是获取摄像头的视频流并显示在Video 签中

var canvas=null,context=null,video=null;

window.addEventListener("DOMContentLoaded", function ()

{

try{

canvas = document.getElementById("canvas");

context = canvas.getContext("2d");

video = document.getElementById("video");

var videoObj = { "video": true,audio:false},

flag=true,

MediaErr = function (error)

{

flag=false;

if (error.PERMISSION_DENIED)

{

alert('用户拒绝了浏览器请求媒体的权限', '提示');

} else if (error.NOT_SUPPORTED_ERROR) {

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');

} else if (error.MANDATORY_UNSATISFIED_ERROR) {

alert('指定的媒体类型未接收到媒体流', '提示');

} else {

alert('系统未能获取到摄像头,请确保摄像头已正确安装。或尝试刷新页面,重试', '提示');

}

};

//获取媒体的兼容代码,目前只支持(Firefox,Chrome,Opera)

if (navigator.getUserMedia)

{

//qq浏览器不支持

if (navigator.userAgent.indexOf('MQQBrowser')  -1) {

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');

return false;

}

navigator.getUserMedia(videoObj, function (stream) {

video.src = stream;

video.play();

}, MediaErr);

}

else if(navigator.webkitGetUserMedia)

{

navigator.webkitGetUserMedia(videoObj, function (stream)

{

video.src = window.webkitURL.createObjectURL(stream);

video.play();

}, MediaErr);

}

else if (navigator.mozGetUserMedia)

{

navigator.mozGetUserMedia(videoObj, function (stream) {

video.src = window.URL.createObjectURL(stream);

video.play();

}, MediaErr);

}

else if (navigator.msGetUserMedia)

{

navigator.msGetUserMedia(videoObj, function (stream) {

$(document).scrollTop($(window).height());

video.src = window.URL.createObjectURL(stream);

video.play();

}, MediaErr);

}else{

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器');

return false;

}

if(flag){

alert('为了获得更准确的测试结果,请尽量将二维码置于框中,然后进行拍摄、扫描。 请确保浏览器有权限使用摄像功能');

}

//这个是拍照按钮的事件,

$("#snap").click(function () {startPat();}).show();

}catch(e){

printHtml("浏览器不支持HTML5 CANVAS");

}

}, false);

//打印内容到页面

function printHtml(content){

$(window.document.body).append(content+"br/");

}

//开始拍照

function startPat(){

setTimeout(function(){//防止调用过快

if(context)

{

context.drawImage(video, 0, 0, 320, 320);

CatchCode();

}

},200);

}

//抓屏获取图像流,并上传到服务器

function CatchCode() {

if(canvas!=null)

{

//以下开始编 数据

var imgData = canvas.toDataURL();

//将图像转换为base64数据

var base64Data = imgData;//.substr(22); //在前端截取22位之后的字符串作为图像数据

//开始异步上

$.post("saveimg.php", { "img": base64Data },function (result)

{

printHtml("解析结果:"+result.data);

if (result.status == "success"  result.data!="")

{

printHtml("解析结果成功!");

}else{

startPat();//如果没有解析出来则重新抓拍解析

}

},"json");

}

}

/script

body

div id="support"/div

div id="contentHolder"

video id="video" width="320" height="320" autoplay

/video

canvas style="display:none; background-color:#F00;" id="canvas" width="320" height="320"

/canvas br/

button id="snap" style="display:none; height:50px; width:120px;"开始扫描/button

/div

/body/html

html5移动端页面上调用手机摄像头扫描二维码并获取二维码信息代码?

html5移动端调用手机摄像头扫描二维码并获取二维码信息代码如下:

[html] view plain copy

!DOCTYPE html

htmlhead

titleHTML5 code Reader/title

meta http-equiv="Content-Type" content="text/html; charset=gb2312"

/head

style type="text/css"

html, body { height: 100%; width: 100%; text-align:center; }

/style

script src="jquery-1.9.1.js"/script

script

//这段代 主要是获取摄像头的视频流并显示在Video 签中

var canvas=null,context=null,video=null;

window.addEventListener("DOMContentLoaded", function ()

{

try{

canvas = document.getElementById("canvas");

context = canvas.getContext("2d");

video = document.getElementById("video");

var videoObj = { "video": true,audio:false},

flag=true,

MediaErr = function (error)

{

flag=false;

if (error.PERMISSION_DENIED)

{

alert('用户拒绝了浏览器请求媒体的权限', '提示');

} else if (error.NOT_SUPPORTED_ERROR) {

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');

} else if (error.MANDATORY_UNSATISFIED_ERROR) {

alert('指定的媒体类型未接收到媒体流', '提示');

} else {

alert('系统未能获取到摄像头,请确保摄像头已正确安装。或尝试刷新页面,重试', '提示');

}

};

//获取媒体的兼容代码,目前只支持(Firefox,Chrome,Opera)

if (navigator.getUserMedia)

{

//qq浏览器不支持

if (navigator.userAgent.indexOf('MQQBrowser')  -1) {

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器', '提示');

return false;

}

navigator.getUserMedia(videoObj, function (stream) {

video.src = stream;

video.play();

}, MediaErr);

}

else if(navigator.webkitGetUserMedia)

{

navigator.webkitGetUserMedia(videoObj, function (stream)

{

video.src = window.webkitURL.createObjectURL(stream);

video.play();

}, MediaErr);

}

else if (navigator.mozGetUserMedia)

{

navigator.mozGetUserMedia(videoObj, function (stream) {

video.src = window.URL.createObjectURL(stream);

video.play();

}, MediaErr);

}

else if (navigator.msGetUserMedia)

{

navigator.msGetUserMedia(videoObj, function (stream) {

$(document).scrollTop($(window).height());

video.src = window.URL.createObjectURL(stream);

video.play();

}, MediaErr);

}else{

alert('对不起,您的浏览器不支持拍照功能,请使用其他浏览器');

return false;

}

if(flag){

alert('为了获得更准确的测试结果,请尽量将二维码置于框中,然后进行拍摄、扫描。 请确保浏览器有权限使用摄像功能');

}

//这个是拍照按钮的事件,

$("#snap").click(function () {startPat();}).show();

}catch(e){

printHtml("浏览器不支持HTML5 CANVAS");

}

}, false);

//打印内容到页面

function printHtml(content){

$(window.document.body).append(content+"br/");

}

//开始拍照

function startPat(){

setTimeout(function(){//防止调用过快

if(context)

{

context.drawImage(video, 0, 0, 320, 320);

CatchCode();

}

},200);

}

//抓屏获取图像流,并上传到服务器

function CatchCode() {

if(canvas!=null)

{

//以下开始编 数据

var imgData = canvas.toDataURL();

//将图像转换为base64数据

var base64Data = imgData;//.substr(22); //在前端截取22位之后的字符串作为图像数据

//开始异步上

$.post("saveimg.php", { "img": base64Data },function (result)

{

printHtml("解析结果:"+result.data);

if (result.status == "success"  result.data!="")

{

printHtml("解析结果成功!");

}else{

startPat();//如果没有解析出来则重新抓拍解析

}

},"json");

}

}

/script

body

div id="support"/div

div id="contentHolder"

video id="video" width="320" height="320" autoplay

/video

canvas style="display:none; background-color:#F00;" id="canvas" width="320" height="320"

/canvas br/

button id="snap" style="display:none; height:50px; width:120px;"开始扫描/button

/div

/body/html

如何通过html5调用摄像头拍照

1. 项目背景

网站项目基于HTML5+AngularJs开发,正在做一个由HTML5调用摄像头拍照,从而实现修改头像的功能。起初觉得HTML5拍照很简单,但是做的时候才发现HTML5获取摄像头并不是那么容易。

2. 如何调用摄像头

$scope.photoErr = false;

$scope.photoBtnDiable = true;

var mediaStream = null,track = null;

navigator.getMedia = (navigator.getUserMedia ||

navigator.webkitGetUserMedia || navigator.mozGetUserMedia ||

navigator.msGetUserMedia);

if (navigator.getMedia) {

navigator.getMedia(

{

video: true

},

// successCallback

function (stream) {

var s = window.URL.createObjectURL(stream);

var video = document.getElementById('video');

video.src = window.URL.createObjectURL(stream);

mediaStream = stream;

track = stream.getTracks()[0];

$scope.photoBtnDiable = false; $scope.$apply();

},

// errorCallback

function (err) {

$scope.errorPhoto();

console.log("The following error occured:" + err);

});

} else {

$scope.errorPhoto();

}

代码解析:

navigator为浏览器对象,包含浏览器的信息,这里就是用这个对象打开摄像头。$scope为AndularJs语法。第一步声明navigator.getMedia来调用浏览器不同的打开摄像头函数,目前仅有getUserMedia、webkitGetUserMedia、mozGetUserMedia、msGetUserMedia四种方式分别对应通用浏览器、Google浏览器、火狐浏览器和IE浏览器,浏览器会自动判断调用哪一个函数。第二步是调用打开浏览器,包含三个参数,分别为需要使用的多媒体类型、获取成功返回的流数据处理函数以及操作失败返回错误消息处理函数。其中,使用时不仅可以设置视频还能设置使用麦克风,设置方式为:

{

video: true,

audio: true

}

调用成功即打开摄像头后返回视频流数据,我们可以将流数据设置到video标签在界面上实时显示图像。mediaStream用来记录获取到的流数据,track在Chrome浏览器中用来跟踪摄像头状态,这两个变量都能用来关闭摄像头。

3. 拍照

$scope.snap = function () {

var canvas = document.createElement('canvas');

canvas.width = "400";

canvas.height = "304";

var ctx = canvas.getContext('2d');

ctx.drawImage(video, 0, 0, 400, 304);

$scope.closeCamera();

$uibModalInstance.close(canvas.toDataURL("image/png"));

};

拍照时需要使用到canvas标签,创建一个canvas标签,设置我们需要拍照的尺寸大小,通过drawImage函数将video当前的图像保存到canvas标签,最后将图像数据转换为base64数据返回并关闭摄像头,这样就完成了我们的拍照功能。这里的$uibModalInstance对象是我们项目中打开弹出层的一个对象,用来控制弹出层的显示。

4. 如何关闭摄像头

$scope.closeCamera = function () {

if (mediaStream != null) {

if (mediaStream.stop) {

mediaStream.stop();

}

$scope.videosrc = "";

}

if (track != null) {

if (track.stop) {

track.stop();

}

}

}

正如前面所说,关闭摄像头的方式是通过mediaStream和track变量,只不过,track只能关闭Chrome浏览器中的摄像头,这也是Chrome 45版本以上关闭摄像头的方式。

5. 集成到AndularJs

事实上,前面所说的都是在AndularJs中实现的,当然,这里只是实现了拍照并返回拍照数据,我们想要在其他地方也使用,就需要将这部分独立出来,这里我们用到了AngularJs中的service机制,将这部分单独做成一个service并在项目中注入,然后就可以在其他地方调用了。

service注册:

app().registerService("h5TakePhotoService", function ($q, $uibModal) {

this.photo = function () {

var deferred = $q.defer();

require([config.server + "/com/controllers/photo.js"], function () {

$uibModal.open({

templateUrl: config.server + "/com/views/modal_take_photo.html",

controller: "photoModalController",

windowClass: "modal-photo"

}).result.then(function (e) {

deferred.resolve(e);

});

});

return deferred.promise;

}

});

调用方式:

$scope.takePhoto = function () {

h5TakePhotoService.photo().then(function (res) {

if (res != null res != "") {

$scope.myImage = res;

}

});

}

h5TakePhotoService为控制器中注入的拍照service对象,最后处理返回的图像数据,设置数据显示到界面上。

6. 兼容问题

主要存在Chrome浏览器中,本地测试时,Chrome浏览器中能够正常使用,但是部署到服务器后就不能正常使用,报错消息为 [object NavigatorUserMediaError],这是因为Chrome浏览器在使用摄像头时只支持安全源访问,所以只能通过https访问才能正常使用。

最后需要说一下,测试时只能通过访问才能使用,不能通过方式访问,即我们需要将代码部署才能访问,可以在Visual Studio、 java web、php中完成。

如何写html5代码调用打开本机的摄像头

先简单的添加需要的控件

video id="video" autoplay=""style='width:640px;height:480px'/video

button id='picture'PICTURE/button

canvas id="canvas" width="640" height="480"/canvas

并在script中定义

var video = document.getElementById("video");

var context = canvas.getContext("2d")

var errocb = function () {

console.log('sth wrong!');

}

然后,简单的说就是利用html5的api navigator.getUserMedia来开启设备的摄像头,浏览器上会出现图示中的提示

if (navigator.getUserMedia) { // 标准的API

navigator.getUserMedia({ "video": true }, function (stream) {

video.src = stream;

video.play();

}, errocb);

} else if (navigator.webkitGetUserMedia) { // WebKit 核心的API

navigator.webkitGetUserMedia({ "video": true }, function (stream) {

video.src = window.webkitURL.createObjectURL(stream);

video.play();

}, errocb);

}

网上有些例子中,navigator.getUserMedia第一个参数是‘video’,这可能是早期的版本,现在必须是obj

还有关于getUserMedia和webkitGetUserMedia 的判断,网上有这么写的

navigator.getUserMedia = (navigator.getUserMedia ||

navigator.webkitGetUserMedia ||

navigator.mozGetUserMedia ||

navigator.msGetUserMedia);

但要注意,他们绑定video.src的方法不一样,本人没有测过createObjectURL是否通用

拍照功能就是简单的调用canvas中的drawImage即可

document.getElementById("picture").addEventListener("click", function () {

context.drawImage(video, 0, 0, 640, 480);

});

所有script代码如图示

然后浏览器中就能看到摄像头,点击picture,就会在把当前摄像头的图片就会出现在右边了

html5怎样调用手机摄像头或者相册

只需要在Html5代码中加入下列代码就可以调用手机摄像头或者相册。

input type="file" accept="video/*;capture=camcorder"

input type="file" accept="audio/*;capture=microphone"

input type="file" accept="image/*;capture=camera"输入此行代码可以调用相机。

input type="file" accept="image/*" /选择此行代码刻意选择调用相机,图片或者相册。

扩展资料:

一个网页对应多个HTML文件,超文本标记语言文件以.htm(磁盘操作系统DOS限制的外语缩写)为扩展名或.html(外语缩写)为扩展名。可以使用任何能够生成TXT类型源文件的文本编辑器来产生超文本标记语言文件,只用修改文件后缀即可。

标准的超文本标记语言文件都具有一个基本的整体结构,标记一般都是成对出现(部分标记除外例如:br/),即超文本标记语言文件的开头与结尾标志和超文本标记语言的头部与实体两大部分。有三个双标记符用于页面整体结构的确认。

标记符html,说明该文件是用超文本标记语言(本标签的中文全称)来描述的,它是文件的开头;而/html,则表示该文件的结尾,它们是超文本标记语言文件的开始标记和结尾标记。

头部内容

标记符 html:说明该文件是用超文本标记语言来描述的,它是文件的开头,而/html则表示该文件的结尾,它们是超文本标记语言文件的开始标记和结尾标记。

head/head:这2个标记符分别表示头部信息的开始和结尾。头部中包含的标记是页面的标题、序言、说明等内容,它本身不作为内容来显示,但影响网页显示的效果。

头部中最常用的标记符是标题标记符和meta标记符,其中标题标记符用于定义网页的标题,它的内容显示在网页窗口的标题栏中,网页标题可被浏览器用做书签和收藏清单。

参考资料来源:百度百科-HTML整体结构

3条大神的评论

  • avatar
    访客 2022-07-07 上午 07:36:20

    _UNSATISFIED_ERROR) {alert('指定的媒体类型未接收到媒体流', '提示');} else {alert('系统未能获取到摄像头,请确保摄像头已正确安装。或尝试刷新页面,重试', '提示');}};//获取

  • avatar
    访客 2022-07-07 上午 09:07:03

    null,context=null,video=null;window.addEventListener("DOMContentLoaded", function ()

  • avatar
    访客 2022-07-07 下午 12:47:14

    http-equiv="Content-Type" content="text/html; charset=gb2312"/headstyle type="text/css"html, body { height: 100%; width: 100%; text-align:ce

发表评论