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

作者:码农小兵 时间:2024-05-09 10:35:26 

下面通过文字说明和代码分析的方式给大家分享移动端图片上传之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无刷新上传的全部内容,希望大家喜欢。

标签:ajax,localResizeIMG
0
投稿

猜你喜欢

  • AngularJS框架的ng-app指令与自动加载实现方法分析

    2024-05-02 17:40:17
  • pycharm Tab键设置成4个空格的操作

    2022-06-24 08:49:06
  • 让ASP也支持动态include文件

    2008-05-08 13:00:00
  • asp sql去左右空格函数

    2008-03-04 17:29:00
  • python数字类型math库原理解析

    2021-11-27 16:34:50
  • Pandas统计计数value_counts()的使用

    2023-11-24 10:28:46
  • 详解python 支持向量机(SVM)算法

    2022-03-06 02:11:24
  • 关于配置babel-plugin-import报错的坑及解决

    2023-07-02 16:39:01
  • window10下mysql 8.0.20 安装配置方法图文教程

    2024-01-14 19:08:59
  • 细谈Mysql的存储过程和存储函数

    2024-01-23 11:05:24
  • window.showModalDialog()返回值的学习心得总结

    2024-05-09 10:35:39
  • OpenCV图像修复cv2.inpaint()的使用

    2022-07-03 05:47:57
  • go语言reflect.Type 和 reflect.Value 应用示例详解

    2023-07-18 11:28:43
  • Python玩转Excel的读写改实例

    2022-01-27 19:59:47
  • Python如何爬取b站热门视频并导入Excel

    2023-06-20 23:27:44
  • Python中os和shutil模块实用方法集锦

    2021-04-19 08:45:12
  • 如何限制表单textarea的文字输入量

    2007-10-06 22:41:00
  • python实现精准搜索并提取网页核心内容

    2021-04-07 09:14:04
  • 在ubuntu16.04中将python3设置为默认的命令写法

    2022-06-21 10:12:41
  • django自定义非主键自增字段类型详解(auto increment field)

    2021-08-22 02:11:42
  • asp之家 网络编程 m.aspxhome.com