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简单练习实现遨游浏览器logo的绘制
Jan 30 HTML / CSS
css3高级选择器使用方法
Dec 02 HTML / CSS
CSS3常用的几种颜色渐变模式总结
Nov 18 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
Mar 06 HTML / CSS
CSS3 border-radius圆角的实现方法及用法详解
Sep 14 HTML / CSS
html5使用canvas实现图片下载功能的示例代码
Aug 26 HTML / CSS
html5组织文档结构_动力节点Java学院整理
Jul 11 HTML / CSS
HTML5验证以及日期显示的实现详解
Jul 05 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
May 07 HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 HTML / CSS
小程序瀑布流解决左右两边高度差距过大的问题
Feb 20 HTML / CSS
iframe与window.onload如何使用详解
May 07 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
php 中英文语言转换类
2011/09/07 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
angularJS提交表单(form)
2015/02/09 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
python中ConfigParse模块的用法
2014/09/29 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Django操作session 的方法
2020/03/09 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
研究生求职推荐信范文
2013/11/30 职场文书
淘宝活动策划方案
2014/02/06 职场文书
2014年司机工作总结
2014/11/21 职场文书
2015年科普工作总结
2015/07/23 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
如何优化vue打包文件过大
2022/04/13 Vue.js