HTML5+Canvas调用手机拍照功能实现图片上传(上)


Posted in Javascript onApril 21, 2017

因为最近一段时间,一直在弄微信项目,其中涉及到了证件上传的功能,刚开始的时候一点头绪都没有,上网查了很多资料,QQ群里面也问了不少人,很多人说如果是app程序,可以申请系统权限,然后再去调用系统底层的东西,但是微信是在浏览器里面操作的,我们自定义的页面也是通过微信内置浏览器打开的,而且微信浏览器在内部进行了很多特殊处理,屏蔽了很多东西,所以要在页面调用拍照功能或者是打开手机系统的图库目录是不可能的,当然,这些都只是大伙儿理论上的猜测而已,而在我查了两天的资料之后,发现这个问题原来是可以解决的,而且实现的过程居然也很简单。只是用到了HTML5的file文件上传功能,再配合canvas即可。下面附上源代码:

<html> 
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> 
<meta name="format-detection" content="telephone=yes"> 
<head> 
 <meta charset="UTF-8"> 
 <title>上传证件</title> 
 <style> 
 body { 
  margin: 20px 20%; 
  color:#777; 
  text-align: center; 
 } 
 #result{ 
  margin-top: 20px; 
 } 
 </style> 
</head> 
<body> 
 <h1 class="text-center">上传证件...</h1> 
 <hr/> 
 <input type="file"/> 
 <div id="result" align="center"></div> 
 <hr/> 
 
 <!-- 引入jQuery --> 
 <script type="text/javascript" src="../js/jQuery/jquery-1.9.1.min.js"></script> 
 <script type="text/javascript" src="../js/LocalResizeIMG.js"></script> 
 
 <!-- mobileBUGFix.js 兼容修复移动设备 --> 
 <script src="../js/mobileBUGFix.mini.js" type="text/javascript"></script> 
 <script type="text/javascript"> 
 $("input:file").localResizeIMG({ 
  width: 500, 
  quality: 0.8, 
  success: function (result) { 
  var img = new Image(); 
  img.src = result.base64; 
  console.log(result.clearBase64); 
  //$("body").append(img); 
  $("#result").empty(); 
  $("#result").append(img); //呈现图像(拍照?果) 
  $.ajax({ 
   url: "upLoadImageServlet", 
   type: "POST", 
   data:{formFile:result.clearBase64}, 
   dataType: "HTML", 
   timeout: 1000, 
   error: function(){ 
   alert("Error loading PHP document"); 
   }, 
   success: function(result){ 
   //alert(result); 
   //console.log(result); 
   alert("Uploads success~") 
   } 
  }); 
  } 
 }); 
 </script> 
</body> 
</html>

上面实现的流程导致是这样的,首先在前端把图片进行压缩,因为手机的不同,可能有的手机拍照给力,像素高,拍出来的图片的大小就相对大一些,所以这里通过一个插件进行了压缩,然后转换成为Base64的编码,再把Base64的编码使用AJAX来POST到服务器,然后在Java或者PHP后台进行Base64解码,解出来的路径即为上传图片的路径地址,然后再进行存储,写到文件或者数据库里面。

此外,这里需要说明一个问题:很多人都说到了微信内置浏览器,之前我也一直认为微信内置浏览器就是微信自己开发的一套浏览器,然后对很多东西进行了限制。其实不是这样的,微信本身并没有再重新开发一套浏览器,而是调用的系统自身的浏览器,是根据手机的不同系统而变化的。微信内置浏览器调用的是手机系统默认浏览器,ios和Android系统默认浏览器都是webkit内核,只是对HTML5和CSS3的支持程度可能不同。因为浏览器只是系统的一部分,因此系统默认浏览器不会单独升级,对HTM5、CSS3的支持程度与系统版本有很大关系。安卓版微信直接调用系统浏览器内核, iOS则是调用safari,大家可以看到下面1和3的效果是一模一样的,1是微信浏览器打开的,3则是魅族MX 3自带的系统浏览器打开的效果。

上面我的我都测试过了,可以正常运行。下面附上几张照片:

1、这是在微信里面打开的效果

HTML5+Canvas调用手机拍照功能实现图片上传(上)HTML5+Canvas调用手机拍照功能实现图片上传(上)

2、这是在手机UC浏览器打开的效果:

HTML5+Canvas调用手机拍照功能实现图片上传(上)

HTML5+Canvas调用手机拍照功能实现图片上传(上)

3、这个是在系统自带浏览器里面打开的效果(ps:我的手机是魅族MX 3),但是这个不是打开系统图库目录,而是直接定位到了系统的文件夹根目录。

HTML5+Canvas调用手机拍照功能实现图片上传(上)HTML5+Canvas调用手机拍照功能实现图片上传(上)

下一篇会讲到在Java后台进行图片上传操作:

HTML5+Canvas+jQuery调用手机拍照功能实现图片上传(二)

插件地址:https://github.com/think2011/LocalResizeIMG

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery图片滚动与幻灯片的实例代码
Apr 08 Javascript
如何使用jQuery来处理图片坏链具体实现步骤
May 02 Javascript
jQuery实现长文字部分显示代码
May 13 Javascript
JavaScript常用脚本汇总(二)
Mar 04 Javascript
Javascript中的匿名函数与封装介绍
Mar 15 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
Jun 01 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
Jun 06 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
js css3实现图片拖拽效果
Mar 04 Javascript
基于JavaScript实现的希尔排序算法分析
Apr 14 Javascript
js canvas实现QQ拨打电话特效
May 10 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 #Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
Apr 21 #jQuery
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
Apr 21 #Javascript
H5图片压缩与上传实例
Apr 21 #Javascript
H5手机端多文件上传预览插件
Apr 21 #Javascript
ES6新特性八:async函数用法实例详解
Apr 21 #Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
Apr 21 #Javascript
You might like
php操作excel文件 基于phpexcel
2010/07/02 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
layui点击按钮页面会自动刷新的解决方案
2019/10/25 Javascript
python多进程中的内存复制(实例讲解)
2018/01/05 Python
python 判断网络连通的实现方法
2018/04/22 Python
解决Ubuntu pip 安装 mysql-python包出错的问题
2018/06/11 Python
解决Python二维数组赋值问题
2019/11/28 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
全球最大的服务市场:Fiverr
2017/01/03 全球购物
语文教育专业求职信
2014/06/28 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server
HTML+JS实现在线朗读器
2022/02/15 Javascript
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers