问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用html5实现利用摄像头拍照上传功能

发布网友 发布时间:2022-04-20 20:19

我来回答

2个回答

热心网友 时间:2022-04-07 10:49

  HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
  1、 视频流
  HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
<video id=”video” autoplay=”"></video>
<script>
var video_element=document.getElementById(‘video’);
if(navigator.getUserMedia){ // opera应使用opera.getUserMedianow
navigator.getUserMedia(‘video’,success,error); //success是回调函数,当然你也可以直接在此写一个匿名函数
}
function success(stream){
video_element.src=stream;
}
</script>
此时,video 标签内将显示动态的摄像视频流。下面需要进行拍照了。
  2、 拍照
  拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。主要代码如下:

var canvas=document.createElement(‘canvas’); //动态创建画布对象
var ctx=canvas.getContext(’2d’);
var cw=vw,ch=vh;
ctx.fillStyle=”#ffffff”;
ctx.fillRect(0,0,cw,ch);
ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //将video对象内指定的区域捕捉绘制到画布上指定的区域,可进行不等大不等位的绘制。
document.body.append(canvas);

  3、 图片获取
  从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);

这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
  第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);

  如果要在上传前获取图片的大小,可以使用:
var length=atob(data).length; //atob 可解码用base-64解码的字串

  第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串(也就是在前台略过上面这步直接上传)。例如PHP里:
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);

  4、 图片上传
  在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时可以用:
$.post(‘upload.php’,{‘data’:data});

在后台我们用PHP脚本接收数据并存储为图片。
function convert_data($data){
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
save_to_file($image);
}
function save_to_file($image){
$fp=fopen($filename,’w');
fwrite($fp,$image);
fclose($fp);
}

  以上的解决方案不仅能用于Web App拍照上传,也可以通过Canvas的编辑功能函数提供图片编辑,例如裁剪、上色、涂鸦、圈点等功能,然后把用户编辑完的图片上传保存到服务器上。
  在还在不断补充修正的HTML5的驱动下,Web App与Native App之间的距离将越来越小。在可预见的不远的未来,越来越多老的和新的开发项目必将会迁移到WEB应用上来。
相关规范:
(为便于阅读,对原文进行了不失原意的适当修改,包括代码中一些错误的重复,并作了注释)
  HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
  1、 视频流
  HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
<video id=”video” autoplay=”"></video>
<script>
var video_element=document.getElementById(‘video’);
if(navigator.getUserMedia){ // opera应使用opera.getUserMedianow
navigator.getUserMedia(‘video’,success,error); //success是回调函数,当然你也可以直接在此写一个匿名函数
}
function success(stream){
video_element.src=stream;
}
</script>
此时,video 标签内将显示动态的摄像视频流。下面需要进行拍照了。
  2、 拍照
  拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。主要代码如下:

var canvas=document.createElement(‘canvas’); //动态创建画布对象
var ctx=canvas.getContext(’2d’);
var cw=vw,ch=vh;
ctx.fillStyle=”#ffffff”;
ctx.fillRect(0,0,cw,ch);
ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //将video对象内指定的区域捕捉绘制到画布上指定的区域,可进行不等大不等位的绘制。
document.body.append(canvas);

  3、 图片获取
  从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);

这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
  第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);

  如果要在上传前获取图片的大小,可以使用:
var length=atob(data).length; //atob 可解码用base-64解码的字串

  第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串(也就是在前台略过上面这步直接上传)。例如PHP里:
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);

  4、 图片上传
  在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时可以用:
$.post(‘upload.php’,{‘data’:data});

在后台我们用PHP脚本接收数据并存储为图片。
function convert_data($data){
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
save_to_file($image);
}
function save_to_file($image){
$fp=fopen($filename,’w');
fwrite($fp,$image);
fclose($fp);
}

  以上的解决方案不仅能用于Web App拍照上传,也可以通过Canvas的编辑功能函数提供图片编辑,例如裁剪、上色、涂鸦、圈点等功能,然后把用户编辑完的图片上传保存到服务器上。
  在还在不断补充修正的HTML5的驱动下,Web App与Native App之间的距离将越来越小。在可预见的不远的未来,越来越多老的和新的开发项目必将会迁移到WEB应用上来。

热心网友 时间:2022-04-07 12:07

一,直接上可以代码参考下:
<script>
//判断浏览器是否支持HTML5 Canvas
window.onload = function () {
try {
//动态创建一个canvas元 ,并获取他2Dcontext。如果出现异常则表示不支持 document.createElement("canvas").getContext("2d");
document.getElementByIdx("support").innerHTML = "浏览器支持HTML5 CANVAS";
}
catch (e) {
document.getElementByIdx("support").innerHTML = "浏览器不支持HTML5 CANVAS";
}
};
//这段代 主要是获取摄像头的视频流并显示在Video 签中
window.addEventListener("DOMContentLoaded", function () {
var canvas = document.getElementByIdx("canvas"),
context = canvas.getContext("2d"),
video = document.getElementByIdx("video"),
videoObj = { "video": true },
errBack = function (error) {
console.log("Video capture error: ", error.code);
};
//navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow
if (navigator.getUserMedia) {
navigator.getUserMedia(videoObj, function (stream) {
video.src = stream;
video.play();
}, errBack);
} else if (navigator.webkitGetUserMedia) {
navigator.webkitGetUserMedia(videoObj, function (stream) {
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, errBack);
}
//这个是拍照按钮的事件,
$("#snap").click(function () {
context.drawImage(video, 0, 0, 320, 320);
//CatchCode();
});
}, false);
//定时器
var interval = setInterval(CatchCode, "300");
//这个是 刷新上 图像的
function CatchCode() {
$("#snap").click();
//实际运用可不写,测试代 , 为单击拍照按钮就获取了当前图像,有其他用途
var canvans = document.getElementByIdx("canvas");
//获取浏览器页面的画布对象
//以下开始编 数据
var imgData = canvans.toDataURL();
//将图像转换为base64数据
var base64Data = imgData.substr(22);
//在前端截取22位之后的字符串作为图像数据
//开始异步上
$.post("uploadImgCode.ashx", { "img": base64Data }, function (data, status) {
if (status == "success") {
if (data == "OK") {
alert("二维 已经解析");
}
else {
// alert(data);
}
}
else {
alert("数据上 失败");
} }, "text");
}
</script>
二.最后的就是接收经过base64编码之后的图像文件了。
public void ProcessRequest (HttpContext context) {
string img;//接收经过base64编 之后的字符串
context.Response.ContentType = "text/plain";
try {
img =context.Request["img"].ToString();
//获取base64字符串
byte[] imgBytes = Convert.FromBase64String(img);
//将base64字符串转换为字节数组
System.IO.Stream stream = new System.IO.MemoryStream(imgBytes);
//将字节数组转换为字节流
//将流转回Image,用于将PNG 式照片转为jpg,压缩体积以便保存。
System.Drawing.Image imgae = System.Drawing.Image.FromStream(stream);
imgae.Save(context.Server.MapPath("~/Test/") + Guid.NewGuid().ToString()+".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片
context.Response.Write("OK");//输出调用结果
} catch (Exception msg) {
img = null;
context.Response.Write(msg);
return;
}
}
如何使用html5实现利用摄像头拍照上传功能

HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。1、 视频流 HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像...

hevc视频怎么查看

作为杭州微帧信息科技有限公司的工作人员,关于如何查看HEVC视频,您可以参考以下步骤:1. **确保设备兼容**:首先,请确认您的设备支持HEVC视频格式。大部分最新的智能手机、平板电脑和电脑都支持这一格式。2. **安装必要软件**:如果您的设备系统(如Windows 10)需要额外的支持才能播放HEVC视频,您可能需要从应用商店下载并安装HEVC Video Extensions等扩展插件。3. **选择播放器**:使用支持HEVC的媒体播放器,如VLC、MPlayer电商平台等,来打开和播放HEVC视频文件。4. **播放视频**:在播放器中打开HEVC视频文件,享受高清画质。请注意,HEVC…【微帧科技】是全球知名的视频编码及AI超高清服务提供商,基于超高压缩效率的自研编码技术、前沿的AI图像算法,致力于为企业提供低成本、超高清、智能化的视频服务,每月处理视频超12亿分钟,涉足的应用场景覆盖长视频、短视频、直播、RTC、智能...

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

想实现手机扫描二维码功能。首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析。首先实现在浏览器中调用摄像头,当然用现在火的不行的html5,html5中的&lt;video&gt;标签,并将从摄像头获得视频作为这个标签的输入来源。实现拍照功能的html5...

如何使用HTML5实现拍照上传应

1:需要chrome 18.0及以上版本,并且需要打开about:flags启用相关功能,也可以使用支持html5的opera浏览器。2:网页必须运行于服务器端,基于http://的。如果直接在本地磁盘中打开也是没用的,可以启用IIS服务,使用localhost:8080运行该应用。这个需要千万注意!!!二: 视频流 HTML5推出了The Media Ca...

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

只需要在Html5代码中加入下列代码就可以调用手机摄像头或者相册。&lt;input type="file" accept="video/*;capture=camcorder"&gt; &lt;input type="file" accept="audio/*;capture=microphone"&gt; &lt;input type="file" accept="image/*;capture=camera"&gt;输入此行代码可以调用相机。&lt;input type="file" accept="...

怎么用html5或js调用手机的摄像头拍照上传以及调用手机相册选取照片...

1、实现头部的方法代码。2、编写css样式的方法代码。3、html上传代码。4、js处理的方法代码。5、测试效果如下。注意事项:JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身...

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

1)获取视频流 添加一个HTML5的Video标签,并将从摄像头获得视频作为这个标签的输入来源 var video = document.getElementByIdx_x_x("video");navigator.getUserMedia({video:true}, function (stream) { video.src = window.webkitURL.createObjectURL(stream);}, function (error) { alert(error);...

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

拍照功能就是简单的调用canvas中的drawImage即可 document.getElementById("picture").addEventListener("click", function () { context.drawImage(video, 0, 0, 640, 480);});所有script代码如图示 然后浏览器中就能看到摄像头,点击picture,就会在把当前摄像头的图片就会出现在右边了 ...

html5如何调用手机摄像头,实现拍照,拍视频实现上传功能

html5提供了 navigator.getUserMedia接口使用设备摄像头,chrome28上测试已经可用,手机端浏览器测试发现只有opera浏览器可用。浏览器未完善之前可以使用PhoneGap完成,它提供了 navigator.camera.getPicture接口,使用js可以方便调用设备摄像头。

如何通过html5调用手机摄像头?

android手机,浏览器chrome32版本下实现了浏览器调用设备摄像头进行拍照。主要分3个步骤来完成:1)获取视频流添加一个HTML5的Video标签,并将从摄像头获得视频作为这个标签的输入来源 var video = document.getElementByIdx_x_x("video"); navigator.getUserMedia({video:true}, function (stream) { ...

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

可以使用file的标签。&lt;input type="file" accept="video/*;capture=camcorder"&gt; &lt;input type="file" accept="audio/*;capture=microphone"&gt; &lt;input type="file" accept="image/*;capture=camera"&gt;

html5调用手机摄像头拍照 js调用摄像头拍照上传 html5调用摄像头 html5能否开手机摄像头 html5调用手机摄像头 html调用摄像头 js调用摄像头拍照 如何调用摄像头 html5切换摄像头
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
狗狗为什么会得胰腺炎症呢 鸡蛋去壳后用了点蛋清做面膜,然后把剩下的拿碗放冰箱里,第2天还可以煮... ...月3 日上午十一点二十分男孩姓李改名李柏涛好吗? 前列腺小囊肿是否严重 前列腺囊肿治疗费用 海信电视有哪些型号 老年痴呆的三个阶段 案件移交到检察院后的流程是怎样的 合肥新站拆迁纠纷律师哪个排名高? 炸鸡粉(炸鸡粉怎么用才能使鸡肉更好吃) 为什么说HTML5是为移动互联网而生的开发语言 新浪微博哪个版本体量小而又实用? 微博和微博国际版有什么不同,那个好一点? 求问 html5是针对移动平台的开发吗?? Html5页面是什么?有什么特点?有哪些应用是基于该... H5版新浪微博和原来WAP版微博有什么不同? 新浪微博的 HTML5 页面体验已经和 native app 差不... 新浪微博H5版是什么东东?HTML5又是什么东西? 微博html5版是用啥登录的 新浪微博的html5版本是什么 川味冬菜扣肉怎么做 “冬菜”是什么啊 冬菜怎么吃 冬菜怎么做 南充冬菜的简介 最正宗冬菜扣肉的做法 怎么做冬菜扣肉好吃 冬菜是什么菜 冬菜,芽菜,梅菜有什么不同? 四川冬菜是什么菜啊 2020年执业药师准考证打印入口在哪里? 新浪微博的version什么意思啊?代表的是版本吗? intel固态硬盘p系列和s系列的区别 英特尔固态硬盘 intel什么型号的固态硬盘最好 intel ssd5和ssd6的区别 如何鉴别Intel固态硬盘真伪,以及是否是被用过的二... Intel固态硬盘哪款好 英特尔固态硬盘和三星固态硬盘哪个好 intel的SSD固态硬盘怎么样 英特尔固态硬盘哪款好 intel固态硬盘tbw什么意思 英特尔固态硬盘为什么那么贵?优点在哪里? 有哪位大神了解intel固态硬盘的吗?它和傲腾智能缓... intel固态硬盘为什么贵了解的说下 intel固态硬盘工具写入速度太慢是怎么回事 英特尔,固态硬盘怎么样, intel固态硬盘怎样查真伪 英特尔的固态硬盘和三星固态硬盘谁好 英特尔的固态硬盘怎么样 英特尔固态硬盘哪个系列好