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 相关文章推荐
使用JavaScript制作一个简单的计数器的方法
Jul 07 Javascript
jQuery网页右侧广告跟随滚动代码分享
Apr 20 Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 Javascript
AngularJS基础 ng-keydown 指令简单示例
Aug 02 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
Jan 10 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
Apr 18 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
Bootstrap实现的标签页内容切换显示效果示例
May 25 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
通过命令行生成vue项目框架的方法
Jul 12 Javascript
JavaScript Window浏览器对象模型原理解析
May 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
PHP mkdir()定义和用法
2009/01/14 PHP
php在数组中查找指定值的方法
2015/03/17 PHP
php compact 通过变量创建数组
2016/11/15 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
event.srcElement 用法笔记e.target
2009/12/18 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
JS重载实现方法分析
2016/12/16 Javascript
详解Angular路由 ng-route和ui-router的区别
2017/05/22 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
Python的socket模块源码中的一些实现要点分析
2016/06/06 Python
python 重定向获取真实url的方法
2018/05/11 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
python代码中怎么换行
2020/06/17 Python
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
关于母亲节的感言
2014/02/04 职场文书
项目投资建议书
2014/05/16 职场文书
园林技术专业求职信
2014/07/28 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
财务工作检讨书
2014/10/29 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技