H5+js调用相机

摘要:
一次偶然的机会,我学会了使用HTML5和javascript调用相机来实现拍照功能。我今天将写下一般原则。页面布局很简单。它是一个输入标记、两个HTML5元素视频、画布和一个按钮。以下是HTML5:context中canvasdrawImage()方法的介绍。drawImage;Img:指定要使用的图像、画布或视频。

在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来。页面布局很简单,就是一个input标签,两个HTML5元素video、canvas和一个button按钮。video元素带有开启视频功能的函数,canvas元素带有捕捉图像功能的函数。

源代码如下:

<!doctype html>
<html lang="en">
<head>
<title>GET VIDEO</title>
<meta charset="utf-8">
</head>
<body>
<input type="button" title="开启摄像头" value="开启摄像头" onclick="getMedia()" />
<video autoplay="autoplay"></video>
<canvas height="500px"></canvas>
<button onclick="takePhoto()">拍照</button>
<script>
function getMedia() {
let constraints = {
video: { 500, height: 500},
audio: true
};
//获得video摄像头区域
let video = document.getElementById("video");
//这里介绍新的方法,返回一个 Promise对象
// 这个Promise对象返回成功后的回调函数带一个 MediaStream 对象作为其参数
// then()是Promise对象里的方法
// then()方法是异步执行,当then()前的方法执行完后再执行then()内部的程序
// 避免数据没有获取到
let promise = navigator.mediaDevices.getUserMedia(constraints);
promise.then(function (MediaStream) {
video.srcObject = MediaStream;
video.play();
});
}

function takePhoto() {
//获得Canvas对象
let video = document.getElementById("video");
let canvas = document.getElementById("canvas");
let ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, 500, 500);
}
</script>
</body>
</html>
 

介绍一下代码中涉及到的两个函数:

getMedia()函数:

constraints 参数是一个包含了video和audio两个成员的MediaStreamConstraints对象,用于说明请求的媒体类型。必须至少一个类型或者两个同时可以被指定。如果浏览器无法找到指定的媒体类型或者无法满足相对应的参数要求,那么返回的Promise对象就会处于rejected[失败]状态,NotFoundError作为rejected[失败]回调的参数。

有关于constraints对象的具体细节请点击下方链接:

有关于constraints对象的具体细节介绍

getMedia()函数中的其他代码解释都在源代码中,不再赘述。

takePhoto()函数:

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

let  canvas =document.getElementById("canvas");

 解释:Javascript使用id来获取video和canvas元素。

 let  ctx =ty.getContext('2d');

解释:创建context对象,getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、

字符以及添加图像的方法。

下面对HTML5中的canvas drawImage()方法做一介绍:

context.drawImage(img,x,y,width,height);

img:规定要使用的图像、画布或视频。

 x: 在画布上放置图像的 x 坐标位置。

 y:  在画布上放置图像的 y 坐标位置。

要使用的图像的宽度。

height: 要使用的图像的高度。

以上就是基本的drawImage()方法的介绍,要想了解更多,请点击下方链接。

更多内容介绍drawImage()方法
---------------------
原文链接:https://blog.csdn.net/lishundi/article/details/80604747

免责声明:文章转载自《H5+js调用相机》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇adb -s指定安卓设备进行shell连接Dev-C++的一些使用技巧快捷键下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】如何修改 video 样式

我们这里说的“修改 video 样式”并不是要自己实现一套 controls,而是尝试修改 video 的默认样式 隐藏全屏按钮 这个很容易查到 video::-webkit-media-controls-fullscreen-button{ display: none; } 那么,video::-webkit-media-controls 是什么?还可以...

Java—视频处理

  原始视频通常需要经过编码处理,生成m3u8和ts文件方可基于HLS协议播放视频。通常用户上传原始视频,系统 自动处理成标准格式,系统对用户上传的视频自动编码、转换,最终生成m3u8文件和ts文件, 处理流程如下:   1、用户上传视频成功   2、系统对上传成功的视频自动开始编码处理   3、用户查看视频处理结果,没有处理成功的视频用户可在管理界面再次...

FFmpeg 滤镜详解

FFmpeg Filter 1. 概念介绍 在多媒体处理中,术语滤镜(filter)指的是修改未编码的原始音视频数据帧的一种软件工具。 2. 基本原理 ● 在编码前,ffmpeg可以对raw(真实/原)音频和视频使用libavfilter库中的滤镜进行处理。(非压缩数据帧)● 多个滤镜可以组成滤镜链图(滤镜链图filtergraphs )。● 在ffmp...

【Gstreamer开发】TI嵌入式处理器GStreamer pipeline

Example GStreamer Pipelines From Texas Instruments Embedded Processors Wiki Jump to: navigation, search Translate this page to Translate Example GStreamer Pipelines MAINTENANCE...

全球最大的3D数据集公开了!标记好的10800张全景图

Middlebury数据集 http://vision.middlebury.edu/stereo/data/ KITTI数据集简介与使用https://blog.csdn.net/solomon1558/article/details/70173223 http://www.dataguru.cn/article-12197-1.html 摘要: 一路走...

小程序-video/视频播放---part1:属性及部分函数

微信小程序视频播放和h5的video标签相同, 格式为:<video></video>. 其相关属性及其图文信息解析如下: 按钮相关: controls  显示默认播放控件(播放/暂停按钮、播放进度、时间)  autoplay  自动播放  如果加上这个属性,包括弹幕在内的信息自动也自动显示 弹幕相关: danmu-btn  显示控...