利用html5调用本地摄像头拍照上传图片[转]
利用html5调用本地摄像头拍照上传图片
html5概念啥的就不废话了,不知道的 百度, 谷歌一堆。。今天学了学html5中的Canvas结合新增的<video>标签来获取本地摄像头,在html5之前,要在浏览器获取本地摄像头只有通过插件(ActiveX,但是这种只有IE支持)或者是flash来获取(或许你没学过flash那就很坑爹了),在之后微软的silvertlight中也可以获取,但这些都比较麻烦,在html5的世界里,要获取本地摄像头,只要配合js就可以轻松获取。。
目前支持html5的浏览器(参考http://www.cnblogs.com/jerry_cong/archive/2011/05/15/2047143.html)
先看看效果。。。(个人测试:使用谷歌Chrome 23.0.1271.97)

看看主要代码吧:
这个是前台HTML的代码。
|
1
2
3
4
5
|
<div id="contentHolder"> <video id="video" width="320" height="320" autoplay></video> <button id="snap" style="display:none"> 拍照</button> <canvas style="display:none" id="canvas" width="320" height="320"></canvas> </div> |
下面这个是主要代码了。(jquery)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
<script> //判断浏览器是否支持HTML5 Canvas window.onload = function () { try { //动态创建一个canvas元素,并获取他2Dcontext。如果出现异常则表示不支持 document.createElement("canvas").getContext("2d"); document.getElementById("support").innerHTML = "浏览器支持HTML5 CANVAS"; } catch (e) { document.getElementById("support").innerHTML = "浏览器不支持HTML5 CANVAS"; } }; //这段代码主要是获取摄像头的视频流并显示在Video标签中 window.addEventListener("DOMContentLoaded", function () { var canvas = document.getElementById("canvas"), context = canvas.getContext("2d"), video = document.getElementById("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.getElementById("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编码之后的图像文件了。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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; } } |

至此B/S通过本地摄像头拍照上传就完成了。HTML5的强大之处,爱不释手了。。。不在像以前需要写一堆烦人的东东了,而且你也可以不用去学flash...
额外说一句,如果您还在用IE6\IE7那您还是别玩html5了...
利用html5调用本地摄像头拍照上传图片[转]的更多相关文章
- 利用html5调用本地摄像头拍照上传图片
这个是前台HTML的代码. <div id="contentHolder"> <video id="video" width="32 ...
- 怎样让HTML5调用手机摄像头拍照——实践就是一切
原文:怎样让HTML5调用手机摄像头拍照--实践就是一切 NanShan 小编将思路提供给了大家.学编程最重要的是实践,我这尽管有完好的代码,可是希望大家都能够自己写出属于自己的代码 HTML5 Th ...
- 调用本地摄像头拍照(H5和画布)
关于H5 和 画布 调用本地摄像头拍照功能的实现 1.代码的实现(html部分) <input type="button" title="开启摄像头" v ...
- HTML5调用本地摄像头画面,拍照,上传服务器
实现功能和适用业务 采集本地摄像头获取摄像头画面,拍照保存,上传服务器: 前端上传图片处理,展示,缩小,裁剪,上传服务器 实现步骤 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显 ...
- getUserMedia API及HTML5 调用手机摄像头拍照
getUserMedia API简介 HTML5的getUserMedia API为用户提供访问硬件设备媒体(摄像头.视频.音频.地理位置等)的接口,基于该接口,开发者可以在不依赖任何浏览器插件的条件 ...
- html5调用手机摄像头,实现拍照上传功能
今天做手机网站,想实现手机扫描二维码功能.首先实现在浏览器中调用手机摄像头,实现拍照功能并且把拍下的照片显示在页面并上传到服务器上,然后再在服务器端进行分析. 首先实现在浏览器中调用摄像头,当然用现在 ...
- H5混合开发二维码扫描以及调用本地摄像头
今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底 ...
- HTML5调用手机摄像头,仅仅支持OPPOHD浏览器
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 调用本地摄像头并通过canvas拍照
首先我们需要新建一个video标签,并且放到html里边 var video = document.createElement("video"); video.autoplay=& ...
随机推荐
- Python 面向对象编程——初见
<什么是面向对象> 面向对象编程(Object Oriented Programming),简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Entity Framework(实体框架 EF)
什么是Entity Framework呢(下面简称EF)? EF(实体框架)是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架.ORM(对象关系映射框架):指的是面向 ...
- SDOI 2017 Round1 解题报告
Day 1 T1 数字表格 题目大意 · 求\(\prod\limits_{i=1}^n\prod\limits_{j=1}^mFibonacci(\gcd(i,j))\),\(T\leq1000\) ...
- Request Response 跳转页面的理解
1.response 跳转页面 private void writeContent(String content) { HttpServletResponse response = ((Servlet ...
- DP经典 BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生
BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 419 Solve ...
- acdream 1735 输油管道 贪心
输油管道 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1735 Description ...
- UIImagePickerController导航字体颜色和背景
创建UIImagePickerController // 创建图片选择器 UIImagePickerController *picker = [[UIImagePickerController all ...
- Android 基于蓝牙的方向控制器
最近开发了一个蓝牙控制器App,用手机远程控制小球的运动. 包含了一些基础知识:多线程使用,页面UI数据更新,按钮事件,选择项功能,蓝牙功能(蓝牙打开,蓝牙搜索,蓝牙连接,蓝牙命令发送,蓝牙命令接收) ...
- mybatis源码分析(3)-----SqlSessionHolder作用
1. sqlSessionHolder 是位于mybatis-spring 包下面,他的作用是对于sqlSession和事务的控制 sqlSessionHolder 继承了spring的Resourc ...
- Lower dc/dc-converter ripple by using optimum capacitor hookup
Low-ripple-voltage positive-to-negative dc/dc converters find use in many of today's high- frequency ...