移动端h5拍照压缩即时上传后台并预览
项目经理让迭代一个功能,实时预览并上传到后台的功能,听到这立马想起了几个第三方插件去实现,mui 和api cloude万万没想到的是这个app前面使用ios 和安卓原生写的,然后mui和api cloud里面都要配置文件,不能嵌入到app中,于是乎开始我的查询h5官方api之路。好在皇天不负有心人,终于让我弄出来了。
大致思路是这样的,首先用h5的input file 在拍照时或者选择手机相册后把获得的图片压缩成base64位(这样提高上传速度,不然会上传很久),然后调用接口传到后台,再从后台吧上传的图片拿下来显示到预览区就可以了。话不多说上代码:
html:
<div class="container">
<!--头像认证开始-->
<div class="top">
<div class="topUp">头像认证</div>
<div class="topDown">
<div class="left">
<div class="pics">
<img src="../images/example2.png" id="carImg"/>
</div>
</div>
<div class="right">
<div class="pics" style="float: right;"><img src="../images/example2.png" id="zmImg"/></div>
</div>
</div>
<div class="topUp">
<div class="left">车身照</div>
<div class="right">手持身份证拍照</div>
</div>
</div>
<!--头像认证结束-->
</div>
<!--拍照或者选择相册弹窗开始-->
<!--正面照开始-->
<div class="file" id="id1">
<div class="photograph">
<a href="javascript:;">
<form method="post" id="businessUpload1" enctype="multipart/form-data">
<input type="file" name="file" accept="image/gif,image/jpeg,image/jpg" capture="camera" id="txCramePic">相机拍照
<!--<input type="hidden" name="account" id="business-account1">
<input type="hidden" name="imgType" id="business-imgType1">-->
</form>
</a>
</div>
<div class="photo">
<a href="javascript:;">
<form method="post" id="businessUpload2" enctype="multipart/form-data">
<input type="file" name="file" accept="image/jpeg,image/jpg" id="txPic">选择相册
</form>
</a>
</div>
<button clsss="gb">取消</button>
</div>
<!--正面照结束-->
<!--身份证正面照开始-->
<div class="file" id="id2">
<div class="photograph">
<a href="javascript:;">
<form method="post" id="businessUpload3" enctype="multipart/form-data">
<input type="file" name="file" accept="image/gif,image/jpeg,image/jpg" capture="camera" id="sfzmCramePic">相机拍照
</form>
</a>
</div>
<div class="photo">
<a href="javascript:;">
<form method="post" id="businessUpload4" enctype="multipart/form-data">
<input type="file" name="file" accept="image/gif,image/jpeg,image/jpg" id="sfzmPic">选择相册
</form>
</a>
</div>
<button class="gb">取消</button>
</div>
<!--身份证正面照结束-->
<button class="gb">取消</button>
</div>
js:
var allowTypes = ['image/jpg', 'image/jpeg'];
// 10MB
var maxSize = 10 * 1024 * 1024;
var base64;
// 图片最大宽度
var maxWidth = 640;
///////////这里开始优化///////////
// 正面照开始
var zhengmianzhao;
$("#zmImg").on('touchend',function () {
$('#id1').show();
// 选择相机开始
// var faceUrl= 'faceUrl';
$('#txCramePic').on('change',function(event){
if(event==null)
return;
var files = event.target.files[0];
var file = files;
var fileName = files.name;
var reader = new FileReader();
// 如果类型不在允许的类型范围内
reader.onload = function (e) {
var img = new Image();
img.src = e.target.result;
img.onload = function(){
// 不要超出最大宽度
var w = Math.min(maxWidth, img.width);
// 高度按比例计算
var h = img.height * (w / img.width);
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
// 设置 canvas 的宽度和高度
canvas.width = w;
canvas.height = h;
ctx.drawImage(img, 0, 0, w, h);
base64 = canvas.toDataURL('image/jpeg');
//console.log(base64);
base64 = base64.substring(base64.indexOf("base64,")+7,base64.length-1);
$.ajax({
url :"",
beforeSend:function(){
$("#zmImg").attr("src","../images/loading.gif");
$('#id1').hide();
},
data:{
'account':account,
'imgType':'faceUrl',
'fileBase64':base64,
'fileName':fileName
},
type : 'post',
dataType : 'json',
success : function(data) {
$("#zmImg")[0].src = data.data.imgUrl;
window.zhengmianzhao = data.data.imgUrl;
},
error : function(data) {
alert("对不起,请重新上传");
$("#zmImg").attr("src","../images/example2.png");
}
});
};
//
};
reader.readAsDataURL(file);
});
// 选择相机结束
// 选择相册开始
$('#txPic').on('change',function(){
if(event==null)
return;
// 获取单张要上传的那个图片
var files = event.target.files[0];
var file = files;
var fileName = files.name;
// h5上传自定义方法
var reader = new FileReader();
// 如果类型不在允许的类型范围内
reader.onload = function (e) {
var img = new Image();
img.src = e.target.result;
img.onload = function(){
// 不要超出最大宽度
var w = Math.min(maxWidth, img.width);
// 高度按比例计算
var h = img.height * (w / img.width);
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
// 设置 canvas 的宽度和高度
canvas.width = w;
canvas.height = h;
ctx.drawImage(img, 0, 0, w, h);
base64 = canvas.toDataURL('image/jpeg');
//console.log(base64);
base64 = base64.substring(base64.indexOf("base64,")+7,base64.length-1);
$.ajax({
url :"",
beforeSend:function(){
$("#zmImg").attr("src","../images/loading.gif");
$('#id1').hide();
},
data:{
'account':account,
'imgType':'faceUrl',
'fileBase64':base64,
'fileName':fileName
},
type : 'post',
dataType : 'json',
success : function(data) {
$("#zmImg")[0].src = data.data.imgUrl;
window.zhengmianzhao = data.data.imgUrl;
},
error : function(data) {
alert("对不起,请重新上传");
$("#zmImg").attr("src","../images/example2.png");
}
});
};
//
};
reader.readAsDataURL(file);
});
// 选择相册结束
});
//正面照结束
以上代码仅供参考,在这个程序员苦逼的年代里 我们需要抱团取暖
移动端h5拍照压缩即时上传后台并预览的更多相关文章
- java多图片上传--前端实现预览--图片压缩 、图片缩放,区域裁剪,水印,旋转,保持比例。
java多图片上传--前端实现预览 前端代码: https://pan.baidu.com/s/1cqKbmjBSXOhFX4HR1XGkyQ 解压后: java后台: <!--文件上传--&g ...
- jsp+springmvc实现文件上传、图片上传和及时预览图片
1.多文件上传:http://blog.csdn.net/a1314517love/article/details/24183273 2.单文件上传的简单示例:http://blog.csdn.net ...
- web 图片上传实现本地预览
在说上传之前先说说如何替换or美化浏览器自带的简陋上传按钮(自定义自己的上传按钮 如:img): 1.将自定义上传按钮上方添加 input file 框,实现input实现透明处理. 2.对自定义上传 ...
- [.ashx檔?泛型处理例程?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_02_fileupload_picture_p ...
- Ajax上传图片以及上传之前先预览
手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成.在文件上传的时候用到了Ajax上传文件,以及图片在上传之前的预览效果 ...
- 关于confluence上传文件附件预览查看时出现乱码的问题解决办法
在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...
- confluence上传文件附件预览乱码问题(linux服务器安装字体操作)
在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...
- 项目分享五:H5图片压缩与上传
一.简介 图片的压缩与上传,是APP里一个很常用的功能.我们来年看 ChiTuStore 是怎样做的.相关文件 App/Module/User/UserInfo.html,App/Module/Use ...
- 图片上传前的预览(PHP)
1.先创建一个file表单域,我们需要用它来浏览本地文件.<form name="form1" id="form1" method="post& ...
随机推荐
- Linux用户角色划分
在Linux系统中,用户是分角色的,角色不同,对应权限不同.用户角色通过UID和GID识别. 大致分为三种:超级用户,普通用户,虚拟用户. 超级用户:默认是root用户,其UID和GID都是0.roo ...
- python3.6如何安装pymssql
使用pip install pymssql安装时,总是会出现UnicodeDecodeError.于是下载了适用的pymssql.whl进行安装,详细可参考 https://docs.microsof ...
- Hexo+Github搭建博客
要使用Hexo,需要在你的系统中支持Nodejs以及Git,如果还没有,那就开始安装吧! 安装Node.js 下载Node.js 参考地址:安装Node.js 安装Git 下载地址:http://gi ...
- [js插件开发教程]实现一个比较完整的开源级选项卡插件
在这篇文章中,我实现了一个基本的选项卡功能:请猛击后面的链接>> [js插件开发教程]原生js仿jquery架构扩展开发选项卡插件. 还缺少两个常用的切换(自动切换与透明度渐变),当然 ...
- [NOIP2014][DP]飞扬的小鸟
[NOIP2014]飞扬的小鸟 ——!x^n+y^n=z^n 题目描述: Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画 ...
- (转)Java中使用正则表达式的一个简单例子及常用正则分享
转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...
- 如何把项目上传到GitHub上
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #a5b2b9 } span.Apple-tab-span ...
- 虚拟专用网VPN
1. 三个专用地址块: (1)10.0.0.0到10.255.255.255 (2)172.16.0.0到172.31.255.255 (3)192.168.0.0到192.168.255.255 2 ...
- 写了一个bug,最后却变成了feature,要不要修呢?
事情是这样子的,前不久接到一个需求,为一个游戏开发礼包码功能 通常一款游戏运营期间会搞各种各样的活动吸引玩家,其中最常见的就是发放礼包, 玩家可以通过礼包码兑换礼包. 用礼包码兑换礼包有个一限制,游 ...
- .1-Vue源码起步
搞事!搞事! 截止2017.5.16,终于把vue的源码全部抄完,总共有9624行,花时大概一个月时间,中间迭代了一个版本(2.2-2.3),部分代码可能不一致,不过没关系! 上一个链接https:/ ...