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

网友投稿 188 2023-07-29


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

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

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

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

处理过程

LocalResizeIMG压缩图片

AjaxPost图片base64到后台

后台接收base64并保存,返回状态

前台代码

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

点击上传文件

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.clearBhttp://ase64:不带图片类型的编码,如“/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= '';

$(".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无刷新上传的全部内容,希望大家喜欢。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通过端口1433连接到主机127.0.0.1的 TCP/IP 连接失败,错误:“connect timed out”的解决方法
下一篇:MyBatis入门学习教程(一)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~