html5拍照功能实现代码(htm5上传文件)


Posted in HTML / CSS onDecember 11, 2013

1、 视频流

HTML5 The Media Capture API提供了对摄像头的可编程访问,用户可以直接用getUserMedia获得摄像头提供的视频流。我们需要做的是添加一个HTML5的Video标签,并将从摄像头获得视频作为这个标签的输入来源(请注意目前仅Chrome和Opera支持getUserMedia)。

复制代码
代码如下:

<videoidvideoid=”video”autoplay=”"></video>
<script>
varvideo_element=document.getElementById(‘video’);
if(navigator.getUserMedia){//operashoulduseopera.getUserMedianow
navigator.getUserMedia(‘video’,success,error);
}
functionsuccess(stream){
video_element.src=stream;
}
</script>

视频流

2、 拍照

拍照功能,我们采用HTML5的Canvas实时捕获Video标签的内容,Video元素能作为Canvas图像的输入,这一点很棒。主要代码如下:

 

复制代码
代码如下:

JavaScript Code复制内容到剪贴板
var canvas=document.createElement(‘canvas’);
var ctx=canvas.getContext(’2d’);
var cw=vw;
var ch=vh;
ctx.fillStyle=”#ffffff”;
ctx.fillRect(0,0,cw,ch);
ctx.drawImage(video_element,0,0,vvw,vvh,0,0,vw,vh);
document.body.append(canvas);

3、 图片获取

下面我们要从Canvas获取图片数据,其核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。

复制代码
代码如下:

var imgData=canvas.toDataURL(“image/png”);

因为真正图像数据是base64编码逗号之后的部分,所以我们实际服务器处理的图像数据应该是这部分,我们可以用两种办法来获取。

第一种:是在前端截取22位以后的字符串作为图像数据,例如:

复制代码
代码如下:

var data=imgData.substr(22);

如果要在上传前获取图片的大小,可以使用:

 

复制代码
代码如下:

var length=atob(data).length;//atobdecodesastringofdatawhichhasbeenencodedusingbase-64encoding

第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串。例如PHP里:

复制代码
代码如下:

$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);

4、 图片上传

在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时:

复制代码
代码如下:

$.post(‘upload.php’,{‘data’:data});

 在后台我们用PHP脚本接收数据并存储为图片。
复制代码
代码如下:

functionconvert_data($data){
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
save_to_file($image);
}
functionsave_to_file($image){
$fp=fopen($filename,’w');
fwrite($fp,$image);
fclose($fp);
}

请注意,以上的解决方案不仅能用于Web App拍照上传,并且你可以实现把Canvas的输出转换为图片上传的功能。这样你可以使用Canvas为用户提供图片编辑,例如裁剪、上色、涂鸦的画板功能,然后把用户编辑完的图片保存到服务器上。

HTML / CSS 相关文章推荐
CSS3制作精致的照片墙特效
Jun 07 HTML / CSS
10个很棒的 CSS3 开发工具 推荐
May 16 HTML / CSS
CSS3制作漂亮的照片墙的实现代码
Jun 08 HTML / CSS
CSS3中Transition动画属性用法详解
Jul 04 HTML / CSS
CSS3下的渐变文字效果实现示例
Mar 02 HTML / CSS
Html5之svg可缩放矢量图形_动力节点Java学院整理
Jul 17 HTML / CSS
HTML5 Canvas中绘制椭圆的4种方法
Apr 24 HTML / CSS
用html5绘制折线图的实例代码
Mar 25 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
Aug 28 HTML / CSS
HTML5如何使用SVG的方法示例
Jan 11 HTML / CSS
浅析HTML5页面元素及属性
Jan 20 HTML / CSS
CSS中使用grid布局实现一套模板多种布局
Jul 15 HTML / CSS
html5教程实现Photoshop渐变色效果
Dec 04 #HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
Dec 04 #HTML / CSS
html5教程画矩形代码分享
Dec 04 #HTML / CSS
html5教程制作简单画板代码分享
Dec 04 #HTML / CSS
html5 viewport使用方法示例详解
Dec 02 #HTML / CSS
html5实现的便签特效(实战分享)
Nov 29 #HTML / CSS
HTML5+JS实现俄罗斯方块原理及具体步骤
Nov 29 #HTML / CSS
You might like
第十二节--类的自动加载
2006/11/16 PHP
php中的时间显示
2007/01/18 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
Python 文件和输入输出小结
2013/10/09 Python
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
详解python 发送邮件实例代码
2016/12/22 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
浅谈Python中的模块
2020/06/10 Python
django rest framework 过滤时间操作
2020/07/12 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
用canvas做一个DVD待机动画的实现代码
2019/04/12 HTML / CSS
大学生求职简历的自我评价范文
2013/10/12 职场文书
大学生四年生活自我鉴定
2013/11/21 职场文书
初中新生军训方案
2014/05/13 职场文书
煤矿安全协议书
2014/08/20 职场文书
合作与交流自我评价
2015/03/09 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python