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 相关文章推荐
JS类定义原型方法的两种实现的区别评论很多
Sep 12 Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 Javascript
JavaScript中访问id对象 属性的方式访问属性(实例代码)
Oct 28 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
小程序ios音频播放没声音问题的解决
Jul 11 Javascript
送你43道JS面试题(收藏)
Jun 17 Javascript
Vue中使用better-scroll实现轮播图组件
Mar 07 Javascript
vue.js实现照片放大功能
Jun 23 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 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
PHP6新特性分析
2016/03/03 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
JS模板实现方法
2013/04/03 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
Python实现测试磁盘性能的方法
2015/03/12 Python
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
Python中异常重试的解决方案详解
2017/05/05 Python
django rest framework 数据的查找、过滤、排序的示例
2018/06/25 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
对Django中内置的User模型实例详解
2019/08/16 Python
python 如何对logging日志封装
2020/12/02 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
宿舍打麻将检讨书
2014/01/24 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题