localResizeIMG先压缩后使用ajax无刷新上传(移动端)


Posted in Javascript onAugust 11, 2015

下面通过文字说明和代码分析的方式给大家分享移动端图片上传之localResizeIMG先压缩后ajax无刷新上传,具体实现过程请看下文。

现在科技太发达,移动设备像素越来越高,随便一张照片2M+,但是要做移动端图片上传和pc上略有不同,移动端你不能去限制图片大小,让用户先处理图片再上传,这样不现实。所以理解的解决方案就是在上传先进行图片压缩,然后再把压缩后的图片上传到服务器。

一翻google之后,发现了localResizeIMG,它会对图片进行压缩成你指定宽度及质量度并转换成base64图片格式,那么我们就可以把这个base64通过ajax传到后台,再进行保存,先压缩后上传的目的就达到了。

处理过程

LocalResizeIMG压缩图片
AjaxPost图片base64到后台
后台接收base64并保存,返回状态
前台代码

重点,引用LocalResizeIMG.js(插件主体)及mobileBUGFix.mini.js(移动端的补丁)

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>移动端图片上传解决方案localResizeIMG先压缩后ajax无刷新上传</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width , initial-scale=1.0 , user-scalable=0 , minimum-scale=1.0 , maximum-scale=1.0" />
<script type='text/javascript' src='js/jquery-2.0.3.min.js'></script>
<script type='text/javascript' src='js/LocalResizeIMG.js'></script>
<script type='text/javascript' src='js/patch/mobileBUGFix.mini.js'></script>
<style type="text/css">
 body{font-family:"微软雅黑"}
 .uploadbtn{ display:block;height:40px; line-height:40px; color:#333; text-align:center; width:100%; background:#f2f2f2; text-decoration:none; }
 .imglist{min-height:200px;margin:10px;}
 .imglist img{width:100%;}
</style>
</head>
<body>
<div style="width:500px;margin:10px auto; border:solid 1px #ddd; overflow:hidden; ">
 <input type="file" id="uploadphoto" name="uploadfile" value="请点击上传图片" style="display:none;" /> 
 <div class="imglist"></div> 
 <a href="javascript:void(0);" onclick="uploadphoto.click()" class="uploadbtn">点击上传文件</a>
</div>
<div style="text-align:center;margin-top:50px;">@ <a href="http://www.devdo.net/">码农小兵,专注web开发 欢迎投稿</a></div> 
</body>
</html>

Js部份,localResizeIMG及Ajax提交部份

使用方法

$('input:file').localResizeIMG({
   width: 400,//宽度
   quality: 1,//质量
   success: function (result) {
      result.base64/result.clearBase64
   }
});

localResizeIMG参数:

          width:缩略图宽度
          quality:图片质量,0—1,越大越好

localResizeIMG返回值

           result.base64:带图片类型的base64编码,可直接用于img标签的src,如“data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/…2wBDAAYEBQYFBAY”;

           result.clearBase64:不带图片类型的编码,如“/9j/4AAQSkZJRgABAQAAAQABAAD/…2wBDAAYEBQYFBAY”

$(document).ready(function(e) {
  $('#uploadphoto').localResizeIMG({
   width: 400,
   quality: 1,
   success: function (result) { 
     var submitData={
        base64_string:result.clearBase64, 
      }; 
    $.ajax({
      type: "POST",
      url: "upload.php",
      data: submitData,
      dataType:"json",
      success: function(data){
       if (0 == data.status) {
        alert(data.content);
        return false;
       }else{
        alert(data.content);
        var attstr= '<img src="'+data.url+'" alt="" />'; 
        $(".imglist").append(attstr); 
       }
      }, 
      complete :function(XMLHttpRequest, textStatus){
      },
      error:function(XMLHttpRequest, textStatus, errorThrown){ //上传失败 
        alert(XMLHttpRequest.status);
        alert(XMLHttpRequest.readyState);
        alert(textStatus);
      }
    }); 
   }
 });
});

保存文件

       在上面一步中,我们把result.clearBase64通过Ajax传入到upload.php中,接下来我们就要在upload.php中接收base64参数,把它转换成img文件保存来服务器中,并给出提示。

$base64_string = $_POST['base64_string'];
 $savename = uniqid().'.jpeg';//localResizeIMG压缩后的图片都是jpeg格式
 $savepath = 'images/'.$savename; 
 $image = base64_to_img( $base64_string, $savepath );
 if($image){
   echo '{"status":1,"content":"上传成功","url":"'.$image.'"}';
 }else{
   echo '{"status":0,"content":"上传失败"}';
 } 
 function base64_to_img( $base64_string, $output_file ) {
   $ifp = fopen( $output_file, "wb" ); 
   fwrite( $ifp, base64_decode( $base64_string) ); 
   fclose( $ifp ); 
   return( $output_file ); 
 }

不足之处

        localResizeIMG压缩后的图片模式都是jpeg,不能保证原有格式。

        当图片宽度小于localResizeIMG设置的width参数时,图片会被拉申,从而引起图片失真(比如width高为600,图片只在400px时,压缩后的图片就变成了600px,图片尺寸变大了,会失真),不知道大家有没有什么好的解决方法。

以上内容是本文介绍localResizeIMG先压缩后使用ajax无刷新上传的全部内容,希望大家喜欢。

Javascript 相关文章推荐
Jquery 获取checkbox的checked问题
Nov 16 Javascript
javascript:void(0)的作用示例介绍
Oct 28 Javascript
javascript setinterval 的正确语法如何书写
Jun 17 Javascript
jQuery中removeClass()方法用法实例
Jan 05 Javascript
Javascript核心读书有感之语句
Feb 11 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
May 25 Javascript
JavaScript获取ul中li个数的方法
Feb 13 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
Jul 15 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
Mar 28 Javascript
js中事件对象和事件委托的介绍
Jan 21 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
JavaScript设置表单上传时文件个数的方法
Aug 11 #Javascript
js限制文本框只能输入中文的方法
Aug 11 #Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
Aug 11 #Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
Aug 11 #Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 #Javascript
JavaScript SHA512&amp;SHA256加密算法详解
Aug 11 #Javascript
js中 javascript:void(0) 用法详解
Aug 11 #Javascript
You might like
1 Tube Radio
2021/03/02 无线电
PHP安装全攻略:APACHE
2006/10/09 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python安装教程
2018/02/28 Python
解决Python requests库编码 socks5代理的问题
2018/05/07 Python
Python解决pip install时出现的Could not fetch URL问题
2019/08/01 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
工作失误检讨书范文大全
2014/01/13 职场文书
建议书的格式
2014/05/12 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
欢迎家长标语
2014/10/08 职场文书
基石观后感
2015/06/12 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
事业单位岗位说明书
2015/10/08 职场文书
小学生法制教育心得体会
2016/01/14 职场文书