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 相关文章推荐
让您的菜单不离网站
Oct 03 Javascript
使用Modello编写JavaScript类
Dec 22 Javascript
js函数setTimeout延迟执行的简单介绍
Jul 17 Javascript
JavaScript严格模式禁用With语句的原因
Oct 20 Javascript
jquery实现未经美化的简洁TAB菜单效果
Aug 28 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
浅谈javascript中的三种弹窗
Oct 21 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
Dec 27 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
Jun 12 Javascript
vue2.0的contextmenu右键弹出菜单的实例代码
Jul 24 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 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
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
js 事件小结 表格区别
2007/08/13 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
BootStrap tooltip提示框使用小结
2016/10/26 Javascript
详谈js模块化规范
2017/07/07 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
2020/05/09 Javascript
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
利用python将json数据转换为csv格式的方法
2018/03/22 Python
python  logging日志打印过程解析
2019/10/22 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python对象的属性访问过程详解
2020/03/05 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
python爬虫把url链接编码成gbk2312格式过程解析
2020/06/08 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
建筑施工实习自我鉴定
2013/09/19 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
社区班子对照检查材料
2014/08/27 职场文书
求职推荐信范文
2015/03/27 职场文书
消防隐患整改通知书
2015/04/22 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
Pytest中conftest.py的用法
2021/06/27 Python