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 相关文章推荐
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
Jun 26 Javascript
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
May 19 Javascript
JavaScript中的typeof操作符用法实例
Apr 05 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
简单介绍JavaScript中字符串创建的基本方法
Jul 07 Javascript
bootstrap导航、选项卡实现代码
Dec 28 Javascript
js实现微博发布小功能
Jan 12 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
Dec 02 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
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
深入密码加salt原理的分析
2013/06/06 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
2019/11/06 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
Python入门篇之数字
2014/10/20 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
Python全栈之列表数据类型详解
2019/10/01 Python
Python Process多进程实现过程
2019/10/22 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
Python爬虫实例——爬取美团美食数据
2020/07/15 Python
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
文员个人求职自荐信
2013/09/21 职场文书
党员批评与自我批评
2014/02/12 职场文书
平面设计求职信
2014/03/10 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
反腐倡廉主题教育活动总结
2015/05/07 职场文书
教师见习总结范文
2015/06/23 职场文书
初一数学教学反思
2016/02/17 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
python数字类型和占位符详情
2022/03/13 Python