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 相关文章推荐
IE兼容css3圆角的实现代码
Jul 21 HTML / CSS
使用before和:after伪类制作css3圆形按钮
Apr 08 HTML / CSS
纯css3实现鼠标经过图片显示描述的动画效果
Sep 01 HTML / CSS
使用CSS3实现一个3D相册效果实例
Dec 03 HTML / CSS
深入浅析CSS3中的Flex布局整理
Apr 27 HTML / CSS
纯CSS3实现的井字棋游戏
Nov 25 HTML / CSS
HTML5 canvas基本绘图之绘制线段
Jun 27 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
Mar 25 HTML / CSS
HTML5 声明兼容IE的写法
May 16 HTML / CSS
带你认识HTML5中的WebSocket
May 22 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
Jan 07 HTML / CSS
table不让td文字溢出操作方法
Dec 24 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中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
python通过函数属性实现全局变量的方法
2015/05/16 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
解决python flask中config配置管理的问题
2019/07/26 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
python 基于卡方值分箱算法的实现示例
2020/07/17 Python
移动通信行业实习自我鉴定
2013/09/28 职场文书
机电工程学生自荐信范文
2013/12/07 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
感恩的演讲稿
2014/05/06 职场文书
离婚协议书怎么写
2014/09/12 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
Nginx 根据URL带的参数转发的实现
2021/04/01 Servers
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
python小型的音频操作库mp3Play
2022/04/24 Python